Web服务有不同的响应。响应对象未定义

时间:2014-12-15 14:41:55

标签: javascript json web-services

我有一个带有JSON响应的web服务。当我以这种方式呼叫服务时:

$.ajax({
    url: "https://myServiceURL/myService/" + ItemID,
    type: 'GET',
    contentType: "application/json",
    dataType: "json",
    success: function (data) {
        console.log(data.myField);
    },
    error: function (jqXHR, textStatus, errorThrown) {
        console.log("Error : " + errorThrown);
    }
});

这很有效。但是,当我按名称过滤(像这样):

$.ajax({
    url: "https://myServiceURL/myService?$filter=Name eq 'Chubaka'",
    type: 'GET',
    contentType: "application/json",
    dataType: "json",
    success: function (data) {
        console.log(data.myField);
    },
    error: function (jqXHR, textStatus, errorThrown) {
        console.log("Error : " + errorThrown);
    }
});

我无法获取数据。数据的数据类型是(对象对象)。但是,当我从data.myField获取值时,它是未定义的。

我用Fiddler检查了回答,两个答案都有结果。我在原始格式中看到的唯一差异是:

1回复:{"Name" : "Chubaka"...}

2回复:[{"Name" : "Chubaka"....}]

差异在哪里我如何从第二个响应中获取值?

3 个答案:

答案 0 :(得分:2)

在第二个响应中,你得到数组,所以你必须这样做

data[0].Name

当你得到阵列时,你必须通过互动来获得结果。在你的情况下,两个不同的调用,所以你可以假设两个结果都是不同的类型。一个结果返回单个对象,第二个结果返回对象的返回数组。    你可以这样做。

   if($.isArray(data))
   {
   for(var i=0;i<data.length;i++)
     console.log(data[0].field)
   }

答案 1 :(得分:1)

第二个响应是数组,所以你首先需要得到对象,然后只有你得到了值。

 var i;
 for (i = 0; i < data.length; ++i) {
 console.log(data[i].myField);
}

json中的方括号是数组。

答案 2 :(得分:0)

服务之间存在细微差别。

1回复: - &gt;返回一个Person-Object

2回复: - &gt;人物对象列表(数组)

我的解决方案:

$.ajax({
    url: "https://myServiceURL/myService?$filter=Name eq 'Chubaka'",
    type: 'GET',
    contentType: "application/json",
    dataType: "json",
    success: function (data) {
        for (var i = 0; i < data.length; i++) {
            console.log(data[i].myField);
        }            
    },
    error: function (jqXHR, textStatus, errorThrown) {
        console.log("Error : " + errorThrown);
    }
});