ajax请求状态码为0的解决办法

<h2>前言</h2>

<p>今天遇到个奇怪的问题,使用JQuery的ajax请求,后台的Controller层也接收到请求了,一切处理很正常,但是很奇怪,浏览器Debug发现,responseText是”error”,状态码是0而不是200.</p>

<p><strong>请求源码如下:</strong></p>

<pre>$.ajax({ type: "POST", url: targetUrl, cache: false, data:post_data, dataType:"json", async: true, // 默认为异步请求 error: function(error) { console.log(error); }, success: function(data) { //... } });</pre>

<h2>状态含义</h2>

  • 0 - (未初始化)还没有调用send()方法
  • 1 - (载入)已调用send()方法,正在发送请求
  • 2 - (载入完成)send()方法执行完成
  • 3 - (交互)正在解析响应内容
  • 4 - (完成)响应内容解析完成,可以在客户端调用了

<h2>问题分析</h2>

<p>jQuery ajax请求错误返回status 0和错误error的问题,分析可能的原因:</p>

  • url不存在(排除) – Controller层定义正确
  • url不可达(排除) – 后台确实接收到请求了,而且处理正确
  • 发送了跨域请求(排除) – 使用CORS Filter, 测试发现也不是
  • 数据格式错(排除) – 浏览器和后台调试发现,数据格式正确
  • ajax在完成之前请求已经被取消(ajax请求没有发出) – 确实是canceled,但是请求确实发出了
  • 请求超时 – 确认问题

<h2>解决办法</h2>

  • 使用异步请求
  • 将timeout时长设置稍长一点

<pre>$.ajax({ type: "POST", url: targetUrl, cache: false, data : post_data, // 传参 dataType : "json", async: false, // 使用同步操作 timeout : 50000, //超时时间:50秒 error: function(error) { console.log(error); }, success: function(data) { //... } });</pre>

<p style="font-size:12px;color:#999;">版权声明:作者写博是为了总结经验,和交流学习之用。 如需转载,请在文章页面明显位置给出原文连接。谢谢!如有问题,请留言!

<br>https://blog.csdn.net/changqing5818/article/details/53932463<p>

猜你喜欢

转载自www.cnblogs.com/leeke98/p/8994096.html