- 原因
当使用jQuery ajax 请求返回json对象时,可能会出现“Invalid JSON”的错误,这种错误通常有以下几个原因:
-
JSON 格式不正确。如果返回的 JSON 数据不符合标准的 JSON 格式,则就会出现这个错误。
-
服务器响应的 Content-Type 未设置为application/json。若服务器端的 Content-Type 没有被正确设置为 application/json,jQuery 就无法正确处理 JSON 数据,从而导致出现“Invalid JSON”的错误。
-
字符编码问题。如果 JSON 数据的编码与服务器响应的 Content-Type 宣传的编码不一致,也会导致解析JSON 失败,出现“Invalid JSON”的错误提示。
-
解决方法
对于上述的三个原因,下面分别给出解决方案。
2.1. JSON 格式不正确
当出现JSON格式不正确的错误时,我们需要确保返回 JSON 数据的格式是标准的 JSON 格式。可以使用jsonlint 工具验证 JSON 格式是否正确。
例如,以下为一个正确的 JSON 对象格式:
{
"name": "John",
"age": 30,
"city": "New York"
}
如果 JSON 格式不正确,就需要检查后台传输数据的方式是否为 JSON 格式。
2.2 服务器响应的 Content-Type 未设置为application/json
当服务器端没有正确设置content-type为application/json的时候,jquery无法正确解析,这个时候可以使用$.ajax的dataType属性,强制将返回数据解析为指定的数据类型。例如:
$.ajax({
url: '/someUrl',
dataType: 'json', // **强制将返回数据解析为JSON类型**
success: function(data) {
// code
}
});
通过设置 dataType 属性为“json”,可以让 jQuery 强制将服务器响应的内容解析成 JSON 数据,即使服务器的响应头中的 Content-Type 没有设置成 application/json 也没关系。
2.3 字符编码问题
当服务器返回的 JSON 数据的编码与 Content-Type 标准中宣传的编码不一致时,就会出现“Invalid JSON”的错误提示。
可以在请求时添加Content-Type和charset头,进行字符编码的指定,如下列代码。
$.ajax({
url: '/someUrl',
type: 'POST',
data: data,
contentType: 'application/json; charset=UTF-8'
}).done(function(data){
console.log(data)
}).fail(function(jqXHR, textStatus, errorThrown){
console.log(jqXHR);
console.log(textStatus);
console.log(errorThrown);
});
通过设置 contentType 属性,以及指定字符编码 charset=UTF-8,可以让 jQuery 正确地解析 JSON 数据,并且避免了出现“Invalid JSON”的错误。
本站文章如无特殊说明,均为本站原创,如若转载,请注明出处:Jquery ajax不能解析json对象,报Invalid JSON错误的原因和解决方法 - Python技术站