在readystate 0,status 0和statusText错误上跟踪AJAX错误
我读了所有这些类似的问题: 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 call start”和“AJAX error”之间的时间。 平均时间为1500-2000毫秒。
编辑:如果我使用preventDefault()
,我可以把它放在哪里? 因为我没有注册点击function等。
Edit2: 这个页面说明了这个:
我们发现,如果ajax请求在完成之前被取消,则可能会发生这种情况。 如果我们触发了ajax请求,然后立即点击链接离开页面,我们就可以重现这个问题。 当用户通过刷新,单击链接或更改浏览器中的URL导航离开页面时,jQuery会引发错误事件。
但是我无法通过在加载AJAX时单击某个链接来重现该问题。
解决了。
我面临同样的问题。 在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"; } });