首页 > 解决方案 > 数字为 0 的 Ajax 响应被解析为未定义

问题描述

我正在使用 jQuery 运行 Ajax 调用,该调用返回一个字段为 0(数字零)的对象。但是,jQuery 返回的数据将该字段设置为“未定义”。

示例代码

$.ajax({
   url: myUrl
}).done(descriptions => {
   console.debug(descriptions)
})

服务器返回的数据具有正确的值,我在 Firefox 开发工具中并通过原始 curl 请求验证了这一点:

{"type":0,"medium":0,"text":"一些文本"}

console.debug 调用的输出将字段“type”和“medium”的值显示为“undefined”

当“type”或“medium”字段为 1 或 2 时,值被正确解析。为什么零 (0) 值更改为未定义,我该如何防止这种情况发生?

标签: javascriptjqueryjsonajax

解决方案


发送请求时,添加 dataType 属性。如果省略,Jquery 会自动解析返回数据,并且可能会破坏结果。他们称其Intelligent Guessing为并且从他们的文档中它的工作方式如下:

dataType(默认值:Intelligent Guess(xml、json、script 或 html)) 类型:String 您期望从服务器返回的数据类型。如果没有指定,jQuery 将尝试根据响应的 MIME 类型推断它(XML MIME 类型将产生 XML,在 1.4 中 JSON 将产生一个 JavaScript 对象,在 1.4 中脚本将执行脚本,其他任何东西都会作为字符串返回)。可用的类型(以及作为第一个参数传递给成功回调的结果)是: ...

由于您的服务器返回 JSON,因此请确保将其告知 jQuery,以避免出现您遇到的问题。您的电话应如下所示:

$.ajax({
   url: myUrl,
   dataType: 'json'
}).done(descriptions => {
   console.debug(descriptions)
})

推荐阅读