$.ajax():responseText 是正确的,但报告了错误.为什么
$.ajax(): responseText is correct but error is reported. Why?
我正在尝试从我的服务器获取一些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(或其他一些内容类型)然后没有被解析。
- 为什么不't Javascript对我的输入值进行了一些重新检查
- 为什么“;未定义的“;在JavaScript中结束循环
- 为什么这在IE中的工作方式与在Firefox中不同
- 知道为什么我的旋转木马不会自动更改图片吗
- 为什么会出现错误;未捕获的类型错误:undefined不是函数;
- 为什么在单独的函数中应用时转换会闪烁/断断续续(D3)
- 为什么在变形之前不缺少Fx
- 为什么JavaScript在for循环为3时向所有4发出警报
- 为什么不是't窗口.恢复正常工作吗?(javascript/jquery)
- 为什么Airbnb风格指南说不鼓励依赖函数名称推断
- 如何通过自己获得Chrome扩展的用户反馈/错误报告
- 为什么要使用0>javascript中的0
- 为什么jslint报告Unexpected'变量'
- 为什么不是't按钮报告显示
- 为什么NodeJS/restify服务器很少在接受时报告EPERM
- $.ajax():responseText 是正确的,但报告了错误.为什么
- 贾斯珀Async报告-空,为什么
- 为什么Firefox报告e.which = 1在onmousemove当没有按钮被按下
- 为什么webview报告不同的屏幕大小,我可以禁用这个
- 为什么location.toString()的报告与location.href相同