$ ajax async false的问题

时间:2012-10-17 18:36:53

标签: ajax bing-maps

我有这段代码:

 for(var i in dataJson){    
            direcc=dataJson[i].dir  ; 
            id=dataJson[i].id   ;

    $.ajax({
            url: 'http://dev.virtualearth.net/REST/v1/Locations?query=' + direcc + '&key=mykey&jsonp=?',
           dataType: 'json',
       async: false,
           success: function(result) {

             loc = result.resourceSets[0].resources[0].point.coordinates;
             direcc=result.resourceSets[0].resources[0].address.formattedAddress;
             lat=loc[0];
             long=loc[1];


          $("#bing").append('latitudeBing:' + lat + '<p>longitudeBing:' + long+'$$$$$$'+id);
 }
   });

问题在于我想要写入纬度+经度+ id,但是当它写入时,id是所有这些的最后一个(id从1-200开始,在所有坐标中都显示为200)。

原始函数是$ getjson,我更改了它以使$ ajax调用async:false,但这并不能解决我的问题。

是的,有人可以帮帮我吗?非常感谢!!

1 个答案:

答案 0 :(得分:1)

现在使用正确的答案进行编辑。

Fiddle to show the concept

for(var i in dataJson){    
    var direcc = dataJson[i].dir; 
    var id = dataJson[i].id;
    makeAjaxCall(direcc, id);
}

function makeAjaxCall(direcc, id) {
    $.ajax({
        url: 'http://dev.virtualearth.net/REST/v1/Locations?query=' + direcc + '&key=mykey&jsonp=?',
        dataType: 'json',
        async: false,
        success: function(result) {
            loc = result.resourceSets[0].resources[0].point.coordinates;
            direcc=result.resourceSets[0].resources[0].address.formattedAddress;
            lat=loc[0];
            long=loc[1];
            $("#bing").append('latitudeBing:' + lat + '<p>longitudeBing:' + long+'$$$$$$'+id);
        }
    });
}

这会将“当前”direccid置于makeAjaxCall函数的范围内。我添加的小提琴只是展示了如何。

此外,无需保留async: false,,所以如果您愿意,请随时删除。