我正试图从我的服务器中获取一些JSON数据,如下所示:
var a = $.ajax({
url: "data.json",
dataType: 'json',
data: null,
error: function(data) {
console.log("error");
},
success: function(data) {
console.log("success");
}
});
执行此操作时,将调用error
函数(error
将打印到控制台)。
奇怪的是,当我检查a
时,我发现已经返回了正确的响应文本。
a
readyState: 4
responseText: "contents of data.json!"
status: 200
statusText: "OK"
发生了什么事?如果请求成功,为什么不成功回调?
答案 0 :(得分:4)
可能是因为返回的特定值不是您指定的类型。响应本身是成功的(正如您通过查看“a”的详细信息所看到的那样),但这不是决定是否执行成功或错误的唯一决定因素。您将json指定为“dataType”(返回类型),但收到了一个字符串。对于测试,那很好,但正如你所看到的,事情不会按预期运行。如果您没有指定dataType选项,jQuery将尝试通过查看mime类型和响应内容来确定返回的内容类型。当它们不匹配时(例如在你的情况下)它是一个错误。
更新:
我意识到我在上面的解释中絮絮叨叨。虽然你似乎解决了这个问题,但让我再详细说明一下。
在您的情况下,有几种错误可能发生。要理解的重要一点是,如果设置“dataType”,jQuery将尝试使用该类型解析responseText。如果您没有设置该选项,它将相应地猜测并解析它(这意味着它将查看MIME类型)并以这种方式解析它。如果指定“dataType”,则responseText需要采用JSON格式。因此,如果您指定“json”,但提供一个字符串(在您的情况下),jQuery解析失败。如果未指定“dataType”和jQuery猜测,则responseText需要与MIME类型匹配。因此,当MIME类型为“application / json”时,您无法返回字符串。当事情不匹配时,那就是错误发生的时候。
希望这有帮助!
答案 1 :(得分:1)
只是预感,但是要返回的内容类型" application / json"?我的预感是错误是JSON预计会回来,但它返回的是text / html(或其他一些内容类型),然后才被解析。