管理多个ajax请求的正确方法是什么?

Bre*_*eak 7 javascript ajax

我们都在AJAX教程中看到了一些发送一些数据的例子.他们都(或多或少)看起来像:

var http = createRequestObject(); // shared between printResult() and doAjax()

function createRequestObject() { /* if FF/Safari/Chrome/IE ... */ ... }

function printResult() 
{ 
    if (http.readyState == 4) { ... } 
}

function doAjax() {
    var request = 'SomeURL';
    http.open('post', request);
    http.onreadystatechange = printResult;
    data = ...; // fill in the data
    http.send(data);
}

// trigger doAjax() from HTML code, by pressing some button
Run Code Online (Sandbox Code Playgroud)

这是我不完全理解的场景:如果按钮被按下几次很快怎么办?应该doAjax()以某种方式重新初始化http对象?如果对象被重新初始化,那么已经播出的请求会发生什么?

PS:主持人:这个问题可能与社区维基有关.如此处所述(https://meta.stackexchange.com/questions/67581/community-wiki-checkbox-missing-in-action) - 如果我做对了 - 请恰当地标记这个问题.

Bre*_*eak 2

当然,现在有许多库可以出色地完成工作,并且应该在生产环境中使用。然而,我的问题是关于幕后细节。所以在这里我找到了类似 lamda 演算的方法来为每个请求提供专用的请求对象。这些对象显然会被传递到响应到达时调用的回调函数等:

function printResult(http) {
  if (http.readyState == 4) { ... } 
  ...
}

function doAjax() {
    var http = createRequestObject();       
    var request = 'SomeURL';

    http.open('get', request);      
    http.onreadystatechange = function() { printResult(http); };
    http.send(null);
    return false; 
} 
Run Code Online (Sandbox Code Playgroud)

在Chrome和IE9下测试成功。