Javascript jquery ajax调用返回readystate 4的错误,状态为200,状态为ok
这真让我难以置信。我从ajax收到一个错误回调。但是,如果我从错误消息中获取res.responseText(顺便说一句,它返回的结果是正确的)并使用它,它会做正确的事情。就好像我收到了成功的回电 数据设置如下: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
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