$.ajax():responseText 是正确的,但报告了错误.为什么

$.ajax(): responseText is correct but error is reported. Why?

本文关键字:报告 为什么 错误 ajax responseText      更新时间:2023-09-26

我正在尝试从我的服务器获取一些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"

这是怎么回事? 如果请求成功,为什么不触发成功回调?

可能是因为返回的特定值不是您指定的类型。响应本身是成功的(正如您通过查看"a"的详细信息所看到的),但这不是执行成功还是错误的唯一决定因素。您将 json 指定为"数据类型"(返回类型),但收到一个字符串。对于测试,这很好,但如您所见,事情不会按预期运行。如果未指定 dataType 选项,jQuery 将尝试通过查看 mime 类型和响应内容来确定返回的内容类型。当它们不匹配时,这是一个错误(就像您的情况一样)。

更新:

我意识到我在上面的解释中漫无边际。虽然你似乎解决了问题,但让我再详细说明一下。

在您的情况下,有几种可能发生错误。重要的是要了解,如果你设置了"dataType",jQuery将尝试解析具有该类型的响应文本。如果您没有设置该选项,它将相应地猜测并解析它(这意味着它将查看 MIME 类型)并以这种方式解析它。如果指定"数据类型",则响应文本需要采用 JSON 格式。因此,如果您指定"json",但提供一个字符串(在您的情况下),jQuery 解析将失败。如果未指定"数据类型"和 jQuery 猜测,则响应文本需要与 MIME 类型匹配。因此,当 MIME 类型为"application/json"时,您无法返回字符串。当事情不匹配时,就会发生错误。

希望对您有所帮助!

只是一种预感,但内容类型是否返回"application/json"? 我的预感是错误是JSON被期望返回,但它返回的文本/html(或其他一些内容类型)然后没有被解析。