0

当这个奇怪的javascript问题出现时,我正在阅读一个代码片段并弄清楚它是如何工作的。

在他们的javascript中,他们调用了

var apiUrl = '/api/v1/pin/?format=json&order_by=-id&offset='+String(offset);
...
$.get(apiUrl, function(pins) { 
    for (...; i < pins.objects.length; i++) ... // works fine
});

他们的 api 返回这个 json 格式:

{"meta": {"limit": 50, "next": "?limit=50&format=json&order_by=-id&offset=60", "offset":    
10, "previous": null, "total_count": 79}, "objects": [ {...},{...}, ... ]}

我试图模仿它,但 $.get 从未接受我简化的 json 字符串。

// my attempt
$.get(myApiUrl, function(pins) { 
    for (...; i < pins.objects.length; i++) ... // ERROR: undefined length
});

我的 Json 字符串采用类似但缩短的格式。

{"objects": [{...},{...}, ... ]}

在我用谷歌搜索 $.getJson() 命令之前,我无法让它工作。我只是想知道为什么他们的 javascript 代码只使用 $.get 而我的必须使用 $.getJson?

是否可以设置某种标题以强制 javascript 将其读取为 json?

4

3 回答 3

3

在这两种情况下,AJAX 调用都会返回一个字符串。jQuery不知何故必须弄清楚如何处理它。它如何做到这一点取决于dataType选项。

文档调用默认值Intelligent guess。那么怎么猜呢?评估Content-Type响应的标头。如果是,application/json那么jQuery将尝试创建一个对象。

为确保jQuery始终尝试将响应解释为JSON您可以dataTypejson.

于 2013-05-03T06:57:02.073 回答
3

如果您没有明确指定内容类型,jQuery 将尝试根据服务器返回的标头确定数据类型。

如果您没有使用 JSON 序列化程序,请使用http://jsonlint.com/this验证 JSON 的有效性,否则您将收到错误消息。

JSON 的正确 ContentType 标头是:application/json

于 2013-05-03T05:50:34.547 回答
2

将 HTTP 响应标头设置Content-Typeapplication/json

例如:

HTTP/1.1 200 OK
Content-Type: application/json
于 2013-05-03T05:51:54.617 回答