在我到达this之前,我一直在阅读this,this,this。
基本上我试图做的只是迭代从php端的json_encode
d的Ajax调用返回的数据。
这是我使用console.log(data)
时返回的对象的结构:
Object {0: "218", 1: "SCT_22156", 2: "10456", 3: "S5_MAN_Artwork-Processing", 4: "Duma Guete", ID: "218", ARTICLE_ID: "SCT_22156", METADATA_ID: "10456", FROM_STAGE: "S5_MAN_Artwork-Processing", SEND_FROM: "Duma Guete"}
我用来迭代的是这个(我想从每个键中获取每个值,所以我希望得到metadata_id
):
$.each(data, function( k, v ) {
console.log(v.METADATA_ID);
});
但这会返回undefined
。
注意:在ajax调用期间,返回的数据可能是一个或多个对象。
我注意到,当返回的数据不止一个对象时,它不会返回undefined
,从而使其成为JSONArray。因此,如果返回的数据是这样的:
Object [{"data":"value"..},{"data":"value"..}]
$.each
运行正常。
无论如何,我可以明确告诉服务器端(php
)应该返回JSONArray,即使它只包含一个对象吗?
我也尝试使用for in loop
,但反过来它并不适用于JSONArray。我也尝试添加timeouts
,但没有运气。我在这里做错了什么?
这是我的ajax电话:
$.ajax({
type:'POST',
url: ,
data:,
dataType : 'json',
success: function(data){
console.log(data);
if(data){
$.each(data, function( k, v ) {
console.log(v.SEND_FROM);
});
}
},
error: function(jqXhr, textStatus, errorThrown){
console.log(errorThrown);
}
});
我尝试过使用这个技巧:
$.each([data], function( k, v ) {
console.log(v.METADATA_ID);
});
添加括号,但会导致undefined
JSONArray(多个对象)结果。
答案 0 :(得分:0)
如果我理解正确,你试图区分data
是数组还是单个对象?如果是这样,我建议您查看this帖子。
由于您使用的是jQuery,因此可以使用isArray
:
$.ajax({
type:'POST',
url: ,
data:,
dataType : 'json',
success: function(data){
console.log(data);
if(data){
if ($.isArray(data))
{
for (var i = 0; i < data.length; i++)
console.log(data[i]['SEND_FROM']);
}
else
console.log(data['SEND_FROM']);
}
},
error: function(jqXhr, textStatus, errorThrown){
console.log(errorThrown);
}
});