XMLHttpRequest status 0 on second load

て烟熏妆下的殇ゞ 提交于 2020-01-17 11:14:12

问题


I am experiencing an interesting issue when I am trying to load some data in .txt format from the same domain using XMLHttpRequest. I am trying to load the data, parse it and then store it in localStorage

var xmlhttp;
// code for IE7+, Firefox, Chrome, Opera, Safari
if (window.XMLHttpRequest){
    xmlhttp=new XMLHttpRequest();
}else{
    // code for IE6, IE5
    xmlhttp=new ActiveXObject("Microsoft.XMLHTTP");
}

var temp;
xmlhttp.onreadystatechange=function(){
    if (xmlhttp.readyState==4 && xmlhttp.status==200){
        temp = xmlhttp.responseText;

    }else{
        alert("readyState: " + xmlhttp.readyState + "status: " + xmlhttp.status);
    }
}
xmlhttp.open("GET","data/somedata.txt", false);
xmlhttp.send();

This code only works if I clean the history and cache; however, on second click of the same link, I would received "Readystate: 4, status 0" for some reason.

Does this has anything to do with localStorage?

if (!localStorage.somedata || localStorage.somedata.count(':') !== somedata.count(':')) {
  localStorage.somedata = temp;
}
window.somedata = JSON.parse(localStorage.somedata);

回答1:


There are two causes of status code of zero.

  1. Making calls from the file protocol.
  2. The page is refreshing/navigating away as the request is being made.

In your case I would assume it is #2. If you are using a button or a link to make the Ajax call, make sure to cancel the click action with either preventDefault or return false.




回答2:


Sounds like a caching issue. Try either switching to a POST method, or appending a timestamp to the GET request querystring and see if that prevents the caching.

xmlhttp.open("POST", "data/somedata.txt", false); 

or:

xmlhttp.open("GET", "data/somedata.txt?" + new Date().valueOf(), false);

Edit: If those don't work, modify your server configuration to send appropriate response headers for that file or type to not cache the response. Ie: Cache-Control: no-cache




回答3:


Try xmlhttp.abort() before opening a new request.

It's a long shot but worth the try.



来源:https://stackoverflow.com/questions/7576064/xmlhttprequest-status-0-on-second-load

易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!