代码之家  ›  专栏  ›  技术社区  ›  Seth

如果远程服务器脱机,air xmlhttprequest超时?

  •  2
  • Seth  · 技术社区  · 15 年前

    我正在编写一个air应用程序,它通过xmlhttprequest与服务器通信。

    我遇到的问题是,如果无法访问服务器,我的异步xmlhttprequest似乎永远不会失败。我的onreadystatechange处理程序检测到打开的状态,但没有检测到其他状态。

    有没有办法让xmlhttprequest超时?

    我需要做一些愚蠢的事情吗,比如使用setTimeout()来等待一段时间,然后在连接未建立的情况下使用abort()?

    编辑: 发现 this ,但在我的测试中,将xmlhttprequest.send()包装在try/catch块中或设置xmlhttprequest.timeout(或timeout或timeout)的值不会有任何影响。

    2 回复  |  直到 7 年前
        1
  •  2
  •   Tamlyn    13 年前

    在air中,就像在其他地方使用xhr一样,必须在javascript中设置一个计时器来检测连接超时。

    var xhReq = createXMLHttpRequest();
    xhReq.open("get", "infiniteLoop.phtml", true); // Server stuck in a loop.
    
    var requestTimer = setTimeout(function() {
       xhReq.abort();
       // Handle timeout situation, e.g. Retry or inform user.
    }, MAXIMUM_WAITING_TIME);
    
    xhReq.onreadystatechange = function() {
      if (xhReq.readyState != 4)  { return; }
      clearTimeout(requestTimer);
      if (xhReq.status != 200)  {
        // Handle error, e.g. Display error message on page
        return;
      }
      var serverResponse = xhReq.responseText;  
    };
    

    Source

        2
  •  0
  •   fatalica    8 年前

    xmlhttprequest timeout和ontimeout是一个syncronic,应该在js客户机中使用 回调 :

    例子:

    function isUrlAvailable(callback, error) {
    
        var xhttp = new XMLHttpRequest();
        xhttp.onreadystatechange = function() {
            if (this.readyState == 4 && this.status == 200) {
                return callback();
            }
            else {
                setTimeout(function () {
                    return error();
                }, 8000);
            }
        };
        xhttp.open('GET', siteAddress, true);
        xhttp.send();
    }