Javascript jquery ajax调用返回readystate 4的错误,状态为200,状态为ok

Javascript jquery ajax调用返回readystate 4的错误,状态为200,状态为ok,javascript,jquery,ajax,Javascript,Jquery,Ajax,这真让我难以置信。我从ajax收到一个错误回调。但是,如果我从错误消息中获取res.responseText(顺便说一句,它返回的结果是正确的)并使用它,它会做正确的事情。就好像我收到了成功的回电 数据设置如下: var dataToSend = {fieldname : textdata}; var ajaxOptions = { url: '/newpage', data: JSON.stringify(dataToSend), contentType: 'appl

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

数据设置如下:

var dataToSend = {fieldname : textdata};
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);
ajax调用如下所示:

var dataToSend = {fieldname : textdata};
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);

错误消息是:出现错误:
{“readyState”:4,“responseText”[这部分非常好],“status”:200,“statusText”:“OK”}

如果您的responseText不是正确的JSON,将引发解析错误。确保您的响应是有效的JSON删除
数据类型:“JSON”

发件人:

数据类型(默认值:智能猜测(xml、json、脚本或html))

类型:字符串

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

“json”:将响应评估为json并返回JavaScript 对象跨域“json”请求转换为“jsonp”,除非 请求的请求选项中包含jsonp:false。JSON 严格解析数据;任何格式不正确的JSON都将被拒绝并删除 将抛出一个分析错误。从jQuery1.9开始,还需要一个空响应 拒绝;服务器应该返回null或{}响应。 (有关正确json格式的更多信息,请参见json.org。)


当您设置了
数据类型
以获取响应,但响应不是您在数据类型中设置的响应时,就会发生这种情况


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

将数据类型更改为:

dataType: 'text',

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

echo json_encode([]);
return;
然后触发成功函数,而不是错误


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

dataType:'json',
这是预期的源响应。您能否确保您所访问的源代码正在生成json作为结果?如果没有,请在删除后重试。看起来您正在返回text/html…所以该错误可能是json解析错误。删除
数据类型:'json'
。显示实际情况returned@Jai这是一个很好的猜测!我在我的数据库中将类型更改为JSON数据,但仍然得到相同的错误。@lynvie see JSON应该像
{key:value}
[{k:v},{k:v}…n]
你能确保在点击它时生成它吗?我使用的是mongodb。我有{type:Schema.Types.Mixed}。当I console.log var dataToSend时,它会打印:“title”:“This title.”。然后我用JSON.stringify(dataToSend)发送它。这还不足以让它成为JSON数据吗?@lynvie,您遇到的问题是respon的数据,而不是发送的数据。您必须执行
console.log(responseText)
并检查这是否是JSON