我需要从第一个data.entities.paises
获得$.post
,从第二个concat()
获得data.entities
$.post
,这就是我正在做的事情:< / p>
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, Colombia, Panam\u00e1, Ciudad del Vaticano
,但我得到的输出是Colombia, Panamá, Ciudad del Vaticano,
,而某些值缺少来自data.entities.paises
的值。我怀疑错误是data.entities.paises
的格式与data.entities
的格式不同,因此returnList
上的函数不会执行作业上帝,因此{的错误在哪里? {1}}功能还是concat()
格式?如果是第二个,如何在连接两者之前将其转换为与data.entities.paises
相同的格式?
答案 0 :(得分:1)
这里有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或下划线,那么使用pluck会更容易。