我有一个带有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"....}]
差异在哪里我如何从第二个响应中获取值?
答案 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);
}
});