Javascript如何区分Json对象和String?

时间:2013-05-03 05:47:15

标签: javascript json jquery

当我发现这个奇怪的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": [{...},{...}, ... ]}

直到我用Google搜索$ .getJson()命令才能让它工作。我只是想知道为什么他们的javascript代码只使用$ .get而我的必须使用$ .getJson ??

你可以设置某种标题来强制javascript将其读作json吗?

3 个答案:

答案 0 :(得分:3)

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

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

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

答案 1 :(得分:3)

在这两种情况下,AJAX调用都返回一个字符串。 jQuery以某种方式必须弄清楚如何处理它。它是如何做的取决于dataType选项。

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

为确保jQuery始终尝试将回复解释为JSON,您可以将dataType设置为json

答案 2 :(得分:2)

将HTTP响应标头Content-Type设置为application/json

例如:

HTTP/1.1 200 OK
Content-Type: application/json