如何指定从Ajax调用jquery返回JSONArray?

时间:2017-05-18 17:03:30

标签: javascript php jquery json ajax

在我到达this之前,我一直在阅读thisthisthis

基本上我试图做的只是迭代从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(多个对象)结果。

1 个答案:

答案 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);
        }
});