用于循环问题的JavaScript

时间:2011-11-17 10:09:04

标签: javascript

我需要从服务器获得4个请求,我已经以这种方式存储了所有这4个URL。有关信息,这是原始网址(http://www.earthtools.org/timezone/40.714352/-74.0059731);

var nationZone = {
    getNewYorkLocalTime :  'getTime.php?lat=40.7143528&lan=-74.0059731',
    getLondonLocalTime : 'getTime.php?lat=51.5001524&lan=-0.1262362',
    getChennaiLocalTime :  'getTime.php?lat=13.060422&lan=80.249583',
    getBangaloreLocalTime:'getTime.php?lat=12.9715987&lan=77.5945627'

}

这是调用我的getTime.php并检索结果。

为此,我为in循环创建了这个,但这只打印了4次intead的一次?我该怎么做才能拨打4个请求?

for(zone in nationZone ){
    if (window.XMLHttpRequest){
        zone=new XMLHttpRequest();
    }else{
        zone=new ActiveXObject("Microsoft.XMLHTTP");
    }
    zone.onreadystatechange=function() {
        if(zone.readyState==4 && zone.status==200){
            alert(zone.responseText);
        }
    }
    zone.open("GET",nationZone[zone],true);
    zone.send();
}

我不介意使用涉及其他第三方库的解决方案

3 个答案:

答案 0 :(得分:1)

您对循环变量和XHR使用相同的名称。不要那样做。

编辑:此外,这个问题有jQuery标签,但你没有使用jQuery。不要使用自己的XHR,而是通过$ .ajax或$ .get使用jQuery的ajax实现。如果远程服务器支持JSONP,也请考虑使用JSONP。

答案 1 :(得分:1)

如果您使用jQuery,可以试试这个,但我怀疑它是否可行,因为不允许跨域ajax。

var nationZone = {
    getNewYorkLocalTime :  'getTime.php?lat=40.7143528&lan=-74.0059731',
    getLondonLocalTime : 'getTime.php?lat=51.5001524&lan=-0.1262362',
    getChennaiLocalTime :  'getTime.php?lat=13.060422&lan=80.249583',
    getBangaloreLocalTime:'getTime.php?lat=12.9715987&lan=77.5945627'

}

$.each(nationZone , function(key, value){
    $.get(value, function(response){
        alert(response);
    });
});

答案 2 :(得分:0)

if / else块中的

zone变量将覆盖for循环中的zone。因此,在完成第一次迭代时,你的循环只有一个zone对象可以处理。

在函数内使用其他一些var名称。这一行:

`zone.open("GET",nationZone[zone],true);`

应该说

`newZoneVariable.open("GET", nationZone[zone], true);`

其中newZoneVariable是循环体内使用的var。