1

私はこのコードを持っています:

 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 を呼び出すように変更しましたが、問題は解決しません。

誰か助けてくれませんか?どうもありがとうございました!!

4

1 に答える 1

1

正しい答えで編集されました。

概念を示すフィドル

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);
        }
    });
}

これにより、「現在の」direccandidが関数の範囲内に置かれmakeAjaxCallます。私が追加したフィドルは、その方法を示しているだけです。

また、async: false,周りを残す必要はありませんので、必要に応じて自由に削除してください。

于 2012-10-17T18:43:14.363 に答える