我需要从第一个 $.post
和 concat()
与 data.entities 获取
来自第二个 data.entities.paises
$.post
这就是我正在做的:
var paisesFromEntity;
$.post(Routing.generate('productoGuardarPasoCinco'), $form.serialize(), 'json').done(function (data, textStatus, jqXHR) {
if (data.entities !== "undefined" || data.entities != "") {
paisesFromEntity = data.entities.paises;
}
}).fail(function () {
return false;
});
var returnList = function (entities) {
if (entities.length > 0) {
var items = [];
entities.forEach(function (value, index, array) {
items.push(value.pais);
});
return items.join(', ');
}
};
var fullList = [];
$.post(Routing.generate('agregarPaisesDistribuidor'), $form.serialize(), 'json').done(function (data, textStatus, jqXHR) {
fullList = fullList.concat(data.entities, JSON.stringify(paisesFromEntity));
var displayText = returnList(fullList);
$('#td-' + data.idToUpdate).html(displayText);
}).fail(function () {
return false;
});
第一个 $.post()
获取此输出:
{
"success":true,
"entities":{
"id":13,
"nombre":"dsdsfsdfsd",
"direccion":"fsdfsdfsdf",
"telefono":"4234234",
"paises":[
"Bolivia",
"Costa Rica",
"Ecuador"
]
}
}
第二个 $.post()
的这个:
{
"success":true,
"entities":[
{
"pais":"Colombia"
},
{
"pais":"Panam\u00e1"
},
{
"pais":"Ciudad del Vaticano"
}
],
"idToUpdate":"14"
}
displayText
中的预期输出应该类似于:Bolivia, Costa Rica, Ecuador, Columbia, Panam\u00e1, Ciudad del Vaticano
但我得到的是这个输出哥伦比亚、巴拿马、梵蒂冈城
,并且某些值缺少 data.entities.paises
中的值。我怀疑错误是 data.entities.paises
与 data.entities
的格式不同,因此 returnList
上的函数没有上帝不做这个工作,那么 concat() 函数或 data.entities.paises 格式的错误在哪里?如果是第二个,在连接两者之前如何转换为与 data.entities
相同的格式?
最佳答案
您这里有 3 个问题。
首先,您可能会遇到时间问题,因为无法保证第一个 $.post
会在第二个之前完成。您需要确保在入住之前两者都已完成。您有几种方法可以做到这一点 - 链接、caolan 的异步库 https://github.com/caolan/async 、检查回调等 - 但这不是您在这里询问的内容。
第二个问题是第一个响应是一个字符串数组;第二个是您想要其值的对象数组,您需要将它们组合起来。
第三个问题是您将字符串数组转换为 JSON 字符串,这也不起作用。
试试这个。
// assuming data.entities is an array of objects, and paisesFromEntity is an array of strings
fullList = fullList.concat(paisesFromEntity, getValues(data.entities));
getValues()
函数
getValues = function(arr){
var ret = [], i;
for (i=0; i<arr.length; i++) {
ret.push(arr[i].pais);
}
return(ret);
};
如果您在 jQuery 中执行此操作,则可以使用
getValues = function(arr){
var ret = [];
$.each(arr,function(i,entry) {
ret.push(entry.pais);
});
return(ret);
};
如果您可以使用 lodash 或 underscore,则使用 pluck 会更容易。
关于javascript - 连接对象不起作用或者我需要将值转换为正确的格式?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/27119684/