这真让我感到困惑。我收到来自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);
错误消息是:发生错误:{"readyState":4,"responseText" [this part is perfectly fine], "status":200, "statusText":"OK"}。
{"readyState":4,"responseText" [this part is perfectly fine], "status":200, "statusText":"OK"}
如果您的responseText不是正确的JSON,则会引发解析错误。无论是 确保你的反应是一个有效的JSON 或 删除dataType: "json"。
dataType: "json"
从jQuery文档:
dataType (默认值:Intelligent Guess(xml,json,脚本或html)) 类型:字符串 您期望从服务器返回的数据类型。如果未指定,则jQuery将尝试根据响应的MIME类型来推断它(XML MIME类型将产生XML,在1.4中,JSON将产生JavaScript对象,在1.4中,脚本将执行该脚本,而其他任何内容将是以字符串形式返回)。可用的类型(以及作为第一个参数传递给您的成功回调的结果)是:
dataType (默认值:Intelligent Guess(xml,json,脚本或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。)