什么是XMLHttpRequest的生命周期?什么时候会破坏XMLHttpRequest?

时间:2015-08-05 01:20:22

标签: ajax

XMLHttpRequest何时销毁?

我刚刚编写了下面的简单函数,xmlhttp已成功发送,但responseText未发送到函数SetStringinDiv()。变量str为空,变量location具有值。

我不知道如何修复它,我也不知道这个问题的关键字是什么。如果此类问题已存在,请告诉我如何找到它或关键字是什么。

<script>
function foo(){
    xmlhttp = new XMLHttpRequest();
    xmlhttp.onreadystatechange = function() {
        if (xmlhttp.readyState == 4 && xmlhttp.status == 200) {
            var str = xmlhttp.responseText;
            SetStringinDiv("div1", str);
        }
    }
    xmlhttp.open("GET", "uri", true);
    xmlhttp.send();
}
</script>
<script>
function SetStringinDiv(location, str) {
    document.getElementById("location").innerHTML = location;
    document.getElementById("str").innerHTML = str;
    if (document.getElementByID(location) == null) {
        document.getElementById("error").innerHTML += ">> error, can not find the div, "
                + location + "\n";
    }
    document.getElementByID(location).innerHTML = str;
}
</script>

1 个答案:

答案 0 :(得分:0)

检查xmlhttp.status!= 200并打印出错误。打印每次调用onreadystatechange时的readystate和status。我想你会在statusText中看到一条错误信息。

现在建议不要使用onreadystatechange回调。我使用下面的代码。请注意,如果服务器没有响应,并且没有关闭您的请求在超过一段时间(2-5分钟)内超时的连接 - 无论是在您的代码中还是在下面。如果它坐在那里,请关闭服务器。您将立即得到错误响应。

var req = new XMLHttpRequest(),
  done = function(response) {
    callback(cache[uri.split('/').pop()] = cache[uri] = response);
  };
req.open("GET", uri + ".lispz", true);
req.onerror = function(err) {
  done({
    uri: uri,
    error: err
  });
}
req.onload = function() {
  return (req.status != 200) ? req.onerror(req.statusText) : done(run(req.responseText));
};
req.send();