前言
今天遇到个奇怪的问题, 使用 JQuery 的 ajax 请求, 后台的 Controller 层也接收到请求了, 一切处理很正常, 但是很奇怪, 浏览器 Debug 发现, responseText 是 "error", 状态码是 0 而不是 200.
请求源码如下
- $.ajax({
- type: "POST",
- url: targetUrl,
- cache: false,
- data:post_data,
- dataType:"json",
- async: true, // 默认为异步请求
- error: function(error) {
- console.log(error);
- },
- success: function(data) {
- //...
- }
- });
状态含义
0 - (未初始化) 还没有调用 send() 方法
1 - (载入) 已调用 send() 方法, 正在发送请求
2 - (载入完成)send() 方法执行完成
3 - (交互) 正在解析响应内容
4 - (完成) 响应内容解析完成, 可以在客户端调用了
问题分析
Query ajax 请求错误返回 status 0 和错误 error 的问题, 分析可能的原因:
url 不存在 (排除) - Controller 层定义正确
url 不可达 (排除) - 后台确实接收到请求了, 而且处理正确
发送了跨域请求 (排除) - 使用 CORS Filter, 测试发现也不是
数据格式错 (排除) - 浏览器和后台调试发现, 数据格式正确
ajax 在完成之前请求已经被取消 (ajax 请求没有发出) - 确实是 canceled, 但是请求确实发出了
请求超时 - 确认问题
解决办法
使用异步请求
将 timeout 时长设置稍长一点
- $.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) {
- //...
- }
- });
来源: http://www.bubuko.com/infodetail-2588021.html