jquery ajax调用使用readystate 4,状态200,statustext ok返回错误

lyn*_*vie 9 javascript ajax jquery

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

数据设置如下:

var dataToSend = {fieldname : textdata};
Run Code Online (Sandbox Code Playgroud)

和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);
Run Code Online (Sandbox Code Playgroud)

错误消息是:出现错误:{"readyState":4,"responseText" [this part is perfectly fine], "status":200, "statusText":"OK"}.

Die*_*ego 15

如果您的responseText不是正确的JSON,则会引发解析错误.无论是确保你的反应是一个有效的JSON删除dataType: "json".

来自jQuery文档:

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

类型:字符串

您期望从服务器返回的数据类型.如果没有指定,jQuery将尝试根据响应的MIME类型推断它(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.)