XmlHttprequest:如何不让服务器等待下一个请求

时间:2019-09-24 08:30:00

标签: javascript ajax xmlhttprequest

我想让服务器获取数据。 数据正常输入,但是要花费很多时间。

我要做的是从客户端发送xmlhttpRequest.send (null),从服务器端快速发送响应数据。

我检查了服务器端日志以解决耗时的问题,发现: 即使收到xmlhttpRequest.send (null),它也会等待下一个请求并最终超时。

我想知道这是使用xmlhttprequest的服务器端问题还是客户端问题。

客户端代码

function HomeLoad() {
    var xhr = new XMLHttpRequest();
    xhr.open('GET', '/HomeLoad.asp', true);
    xhr.onreadystatechange = function() {
        if (xhr.readyState == 4){
            if(xhr.status == 200){
                //home_Arr = xhr.responseText.split('&');
            }
        }
    };
    xhr.send(null);
}

$(document).ready(function() 
{
  HomeLoad();
});

1 个答案:

答案 0 :(得分:0)

同步XHR请求通常会导致网络挂起。但是开发人员通常不会注意到此问题,因为挂起仅在网络状况不佳或远程服务器响应速度较慢时才表现出来。现在,同步XHR处于弃用状态。建议开发人员远离同步API并使用同步请求。

有关更多信息,请参见下面的URL:

https://developer.mozilla.org/en-US/docs/Web/API/XMLHttpRequest/Synchronous_and_Asynchronous_Requests

var request = new XMLHttpRequest();
request.open('GET', '/bar/foo.txt', false);  // `false` makes the request synchronous
request.send(null);

if (request.status === 200) {
  console.log(request.responseText);
}

对于异步请求:

var xhr = new XMLHttpRequest();
xhr.open("GET", "/bar/foo.txt", true);
xhr.onload = function (e) {
  if (xhr.readyState === 4) {
    if (xhr.status === 200) {
      console.log(xhr.responseText);
    } else {
      console.error(xhr.statusText);
    }
  }
};
xhr.onerror = function (e) {
  console.error(xhr.statusText);
};
xhr.send(null);

第2行的第三个参数指定为true,以指示应异步处理请求。