Jquery ajax调用返回一个错误,readystate 4, status 200, statustext ok
jquery ajax call returning an error with readystate 4, status 200, statustext ok
这真的让我很困惑。我从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接收文本响应
- Firefox Addon为什么标签页的readystate未定义
- IE9 XMLHTTPRequest请求正文不完整,但readyState=4 statuscode=200
- readyState=4三次.Ajax-由警报引起
- 使用document.readyState正确使用Selenium
- 在 Meteor.loginWithPassword 之后,旧用户不会离线(meteor-user-status 包)
- 通过PHP的标头(“内容处置:附件..”)下载文件后,将document.readyState的状态更改为“完成”
- HTML5视频readyState与事件侦听器
- GWT应用程序中出现错误HTTP 404(“Script Tag Failure-no status available
- Spring MVC中的PUT方法HTTP Status 400-AngularJS
- Express和Typescript-Error.stack和Error.status属性不存在
- 获得readyState为4和状态200加上状态文本“0”;OK”;而成功函数仍然没有;我没有接到电话
- 如何使用readyState判断XHR已发送到服务器
- xmlHttp.status==200从来都不是真的
- jquery ajax readystate 0 responsetext status 0 statustext er
- Ajax onreadystatechange函数,readystate=4和status=200被多次调用
- {“readyState”:0,“status”:0、“statusText”:“NetworkError:未能在
- Jquery ajax调用返回一个错误,readystate 4, status 200, statustext ok
- 如果AJAX中的(xmlhttp.readyState==4&&xmlhttp.status==200)
- {"readyState":0",status:"0",statusT
- Javascript Ajax调用总是返回readyState=1和status=0错误