在 readystate 0、status 0 和 statusText 错误上跟踪 AJAX 错误
Posted
技术标签:
【中文标题】在 readystate 0、status 0 和 statusText 错误上跟踪 AJAX 错误【英文标题】:Tracking AJAX error on readystate 0, status 0 and statusText error 【发布时间】:2014-09-21 10:11:19 【问题描述】:我阅读了所有这些类似的问题:1、2、3、4、5 和 6。但我需要调试更多。
所有这些问题都说问题是由于跨域策略引起的,e.preventDefault()
解决了问题。但我怀疑这会破坏其他一些东西,所以我需要确定。
在我的站点中,我有一个每天触发 15k 次的操作。当用户访问网页时,我的 javascript 文件会检查元素。如果元素存在,它会进行 AJAX 调用。
$(document).ready(function()
// I do something here
if ($('#mydiv').length !== 0)
var startTime = new Date().getTime();
$.ajax(
type: "POST",
url: "/mypage",
success: function (data)
// I do something here
,
timeout: 20000,
error: function(r, s, e)
var elapsedTime = (new Date().getTime() - startTime );
var string = "readyState: "+r.readyState+", status: "+r.status+", statusText: "+r.statusText+", responseText: "+r.responseText+", textStatus: "+s+", error: "+e +", elapsedTime: "+elapsedTime;
// send this string to server for logging
formData = string:string;
$.ajax(
url : "/mylog",
type: "POST",
data : formData
);
);
// I do something here
);
对于 15k 个请求,大约 70 次用户会收到 AJAX 错误。 ~20 是由于超时。 ~50 是由于未知错误。当我检查客户端的日志时,我看到 AJAX 请求为未知错误提供了这些值:readyState: 0, status: 0 and statusText: error
尽管针对此问题建议使用 e.preventDefault()。我需要知道用户为这个错误做了什么。在我的 javascript 文件中,我没有提出任何跨域请求。但我不知道用户为这个错误做了什么?是否有可能了解更多关于此错误的信息?
注意:我跟踪“AJAX 调用开始”和“AJAX 错误”之间的时间。平均时间为 1500-2000 毫秒。
编辑:如果我使用preventDefault()
,我可以把它放在哪里?因为我没有注册点击功能等。
Edit2:This page 这么说:
我们发现,如果 ajax 请求正在获取,则可能会发生这种情况 在完成之前取消。如果我们可以重现这个问题 触发了ajax请求,然后立即点击链接到 离开页面。 jQuery 抛出错误事件时 用户通过刷新或单击离开页面 链接,或更改浏览器中的 URL。
但我无法通过在加载 AJAX 时单击某个链接来重现该问题。
【问题讨论】:
你能弄清楚这个吗?我一直在经历几乎相同的情况,其中看似随机的请求以您的速率或稍高的速率失败,statusText=error 和 status=0。谢谢! 我可以在 ajax 加载期间按 Esc 键重复此错误。当我按 Esc 键时,ajax 停止并发生错误。 【参考方案1】:解决了。
我遇到了同样的问题。 ajax调用后有重定向时会出现此问题。
破解密码:
$.ajax(
url: '',
dataType: 'jsonp',
success: function (json)
// do stuff here
,
error: function (error)
// do stuff here
);
window.location.href = "www.google.com";
在上面的代码中,在 ajax 之后有一个重定向,它给出了就绪状态 0 的错误。
解决方案: 得到一些回应后写重定向。我写的完整。
$.ajax(
url: '',
dataType: 'jsonp',
success: function (json)
// do stuff here
,
error: function (error)
// do stuff here
,
complete: function ()
window.location.href = "www.google.com";
);
【讨论】:
以上是关于在 readystate 0、status 0 和 statusText 错误上跟踪 AJAX 错误的主要内容,如果未能解决你的问题,请参考以下文章
jquery ajax readystate 0 responsetext status 0 statustext 错误
jquery ajax 错误 "readyState":0,"responseText":"","status":0,&
XMLHttpRequest对象的readyState和status区别