Jquery ajax调用返回一个错误,readystate 4, status 200, statustext ok

jquery ajax call returning an error with readystate 4, status 200, statustext ok

本文关键字:readystate status ok statustext 错误 一个 返回 调用 ajax Jquery      更新时间:2023-09-26

这真的让我很困惑。我从ajax得到一个错误回调。但是,如果我从错误消息中获取res.responseText(它返回正确,顺便说一句)并使用它,它会做正确的事情。就好像我收到了一个成功的回调。

数据设置如下:

var dataToSend = {fieldname : textdata};

和ajax调用是这样的:

var ajaxOptions = {
    url: '/newpage',
    data: JSON.stringify(dataToSend),
    contentType: 'application/json; charset=utf-8',
    dataType: 'json',
    cache: false,
    processData: false,
    type: 'POST',
    success: function(res) {
        console.log("success!");
        $('#' + divname).html(res);
    },
    error: function(res) {
        console.log("There was an error: " + JSON.stringify(res));
        $('#' + divname).html(res.responseText);
    }
};
$.ajax(ajaxOptions);

错误信息是:There was an error: {"readyState":4,"responseText" [this part is perfectly fine], "status":200, "statusText":"OK"} .

如果您的responseText不是正确的JSON,则抛出解析错误。要么确保您的响应是有效的JSON,要么删除dataType: "json"

From jQuery docs:

dataType(默认:Intelligent Guess (xml, json, script,或html))

类型:字符串

期望从服务器返回的数据类型。如果没有的MIME类型,jQuery将尝试推断它响应(XML MIME类型将生成XML,在1.4中将生成JSON)一个JavaScript对象,在1.4脚本将执行脚本,和其他任何内容都将作为字符串返回)。可用的类型(和作为第一个参数传递给成功回调的结果是:

"json":将响应计算为json并返回JavaScript对象。跨域"json"请求被转换为"jsonp",除非该请求在其请求选项中包含jsonp: false。JSON数据以严格的方式解析;任何格式错误的JSON都将被拒绝抛出一个解析错误。从jQuery 1.9开始,空响应也是拒绝了;服务器应该返回null或{}的响应。(有关正确的JSON格式的更多信息,请参阅json.org)

这恰好是当您设置dataType以获得响应,但响应不是您在数据类型中设置的。

因此,在您的情况下设置了dataType: 'json',,并且正如您在评论部分提到的那样,您在后端设置了string,因此您需要将数据类型更改为text

将您的数据类型更改为:

dataType: 'text',

解决服务器端问题的一种方法是回显一个空数组,json编码:

echo json_encode([]);
return;

然后触发成功函数而不是错误。

或者只是将scriptside的dataType: 'json',更改为dataType: 'text',,告诉jquery接收文本响应