我一直试图想出如何在Javascript中正确接收OData响应几天。问题是响应被格式化为数组而不是JSON,因此函数JSON.parse(mydata)
不适用于我收到的数据。
我的问题有两个:请求OData以JSON形式发送响应和/或如何将当前响应格式化为JSON的正确方法是什么?
以下是我正在使用的代码:
$.ajax({
type: "GET",
url: requestUri,
dataType: "script",
accept: "application/json",
success: function(data, request) {
var jsonData = JSON.parse(data);
},
error: function(msg) {
alert(msg);
}})
以下是使用data
记录变量console.log
的示例响应:
{"@odata.context":"http://localhost:5001/odata/$metadata#Movies","value":[{"Title":"Pulp Fiction","Genre":"Action","RunTime":0,"Sales":0,"Key":2}]}
答案 0 :(得分:2)
问题是响应被格式化为数组而不是JSON
不可能。您无法通过HTTP发送“数组”。你必须以某种方式编码...例如作为JSON。
除非使用dataType
选项覆盖它,否则jQuery将使用Content-Type
HTTP响应头来确定数据的编码方式。如果它是JSON,它将解析JSON。
data
的值是您阅读原始responseText
并通过JSON.parse
传递的内容。
所以只是不要尝试手动解析它。 jQuery已经为你完成了。
略过步骤:
var jsonData = JSON.parse(data);
...只需使用data
。
注意:JSON.parse
的输出是对象,数组或其他JavaScript数据类型。 JSON数据是您从JSON.stringify
获得的数据。
答案 1 :(得分:0)
如果响应是OData格式,如您的示例所示,但您希望它以JSON格式可以由 JSON.parse 解析,请添加 $ format = json OData查询,只要OData端点支持它。我知道Dynamics 365没有。
答案 2 :(得分:-1)
您可以将其添加到变量中并像这样访问它。
var v={"@odata.context":"http://localhost:5001/odata/$metadata#Movies","value":[{"Title":"Pulp Fiction","Genre":"Action","RunTime":0,"Sales":0,"Key":2}]};
//v.value[0] is a json object
console.log(v.value[0]);
或完全跳过作业并以这种方式访问:
data.value[0]
data.value[0].Genre
data.value[0].RunTime
etc....