摘要:前端使用ajax请求成功,后台返回了数据成功,但是不进success而是进入了error。这里我详细介绍下我这出现的问题。

这里其实应该首先看你的前端报错

这里报错:

1
SyntaxError: JSON.parse: unexpected character at line 1 column 1 of the JSON data

ajax错误

仔细观察这张图,这里明明状态是200,但是在ajax中却会进入到error而不会进去到success,为什么呢?

贴一下ajax的代码看一下:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
$.ajax({
type: "POST",
contentType: "application/json",
url: "/manage ",
data:JSON.stringify(request),
dataType: "JSON",
success: function(result) {
console.log(result);
},
//请求失败,包含具体的错误信息
error : function(e){
console.log(e.status);
console.log(e.responseText);
}
});

其实在错误中已经说的很明显是Json解析的错误,那么再来看我后台返回的只是一个字符串不是json格式的

所以问题找到了就是因为后台返回的不是Json格式,而只是个字符串。所以造成解析异常。
这里需要注意的是:
为什么前端会解析成json呢?其实就是因为设置了dataType: “JSON”
这里我们已经规定了接受的格式是json,可是我后台返回的却是个字符串。所以一定会错的。也就进入了error。

这里我们把后台返回的改成返回json字符串,看没有问题

ajax正确

其实这里还有一种办法就是设置【 dataType: “text”】这样就会接着后台传送的纯文本信息。若果你需要的话。

好了最后贴一下dataType的可选值

参考链接:https://www.w3school.com.cn/jquery/ajax_ajax.asp

dataType
类型:String
预期服务器返回的数据类型。如果不指定,jQuery 将自动根据 HTTP 包 MIME 信息来智能判断,比如 XML MIME 类型就被识别为 XML。在 1.4 中,JSON 就会生成一个 JavaScript 对象,而 script 则会执行这个脚本。随后服务器端返回的数据会根据这个值解析后,传递给回调函数。可用值:
• “xml”: 返回 XML 文档,可用 jQuery 处理。
• “html”: 返回纯文本 HTML 信息;包含的 script 标签会在插入 dom 时执行。
• “script”: 返回纯文本 JavaScript 代码。不会自动缓存结果。除非设置了 “cache” 参数。注意:在远程请求时(不在同一个域下),所有 POST 请求都将转为 GET 请求。(因为将使用 DOM 的 script标签来加载)
• “json”: 返回 JSON 数据 。
• “jsonp”: JSONP 格式。使用 JSONP 形式调用函数时,如 “myurl?callback=?” jQuery 将自动替换 ? 为正确的函数名,以执行回调函数。
• “text”: 返回纯文本字符串