0

我正在尝试在 js 中发出多个 http get 请求。但我是个菜鸟。我也不会反对 jQuery。这个想法是我打电话给我的服务器,这样我就可以填充一个 js 图表。

var client;
function handler() { 
    if(client.readyState == 4 && client.status == 200) { 
        // make a chart
    }
} 

window.onload = function() { 
    client = new XMLHttpRequest(); 
    client.onreadystatechanged = handler; 
    client.open("GET", "http://someurl/stuff"); 
    client.send();
}

以上就是一个web请求的基本思路。处理程序似乎在执行回调或事件。这在创建一个获取请求时有效。但如果我做了两个或更多,那么我得到的结果好坏参半。有时所有请求都会起作用,有时没有,或者只有一个。发生的错误是连接尚未关闭。

4

1 回答 1

0

这段代码的主要问题是它使用相同的全局变量(例如),当多个请求被破坏client时,这些变量只会失败。

(由于请求的异步性质,处理程序调用的顺序未定义的问题仅是由于在给定代码缺乏创建/使用 XHR 对象的重入性 - 处理程序不可能是在访问client变量时保证正确的 XHR 对象!)

闭包和对象避免了这个问题,但是.. 只需使用 jQuery(或您喜欢的任何提供良好 XHR 接口的库,最好使用 Promises)。

既然你“不会反对 jquery”,那就用它吧。注意在回调(或承诺处理程序)中使用它们提供的返回数据进行工作 - 这是因为请求是异步的。

于 2013-11-13T23:22:28.193 回答