首先,我從json文件中獲取一些郵政編碼。之後,通過郵政編碼加載完成,我回路上與郵政編碼的foreach郵政編碼連接到檢測Ajax是否完成
http://api.geonames.org/postalCodeSearchJSON?postalcode="+zip+"&maxRows=1&username=demo
和替換「拉鍊」。因此,如果我有30個郵政編碼,它會將此URL調用30次,併爲每個郵政編碼獲取緯度和經度,並將它們放入數組中。
問題是,我想在我的數組被ajax調用完全構建之前使用它。我正在做的工作是做一個setTimeout()3秒鐘,以便瀏覽器有時間完全構建數組,然後我可以使用它。
我目前使用
$.getJSON("zip-codes.json", function(){}).done(function(locations){
// this .done() isnt actually working
});
下面是我的代碼:
var marker_object = new Array;
// get location zip codes
$.getJSON("zip-codes.json", function(){}).done(function(locations){
// for each zip code
$(locations.nodes).each(function(i, location_value){
var name = location_value.node.city+', '+location_value.node.state+'\n'+location_value.node.phone;
var zip = location_value.node.zip;
// if zip is not empty
if(zip != ''){
// get lat, long for each zip
$.getJSON("http://api.geonames.org/postalCodeSearchJSON?postalcode="+zip+"&maxRows=1&username=midnetmedia", function(){}).done(function(long_lat){
// loop thru each zip code, even tho we only return 1 value at a time
$(long_lat.postalCodes).each(function(k,long_lat_value){
marker_object.push({latLng: [long_lat_value.lat, long_lat_value.lng], name: name});
});
}); // get lat, long for each zip
} // if not empty
}) // foreach location
}); // get zip codes
setTimeout(function(){
console.log(marker_object);
}, 3000);
爲 「marker_object」 最終的結果看起來是這樣的,當它終於建成了
marker_object = [
{latLng: [34.079351, -117.455114], name: 'City 1'},
{latLng: [24.079351, -67.455114], name: 'City 2'},
{latLng: [14.079351, -36.455114], name: 'City 3'},
...
]
如何知道我的$ .getJSON實際完成時的情況?因爲.done()不適合我。我應該使用$ .AJAX()來代替嗎?
「$ .getJson」的第二個參數是成功調用的函數(即完成時)。你爲什麼不把你的代碼放在那裏?如果你不使用它,不要傳遞一個空的函數,把它全部放在一邊。 –
您傳遞的回調函數什麼都不做......只是使用它。 – Jasper
更重要的是,是什麼讓你覺得'做'沒有被調用?在這[小提琴](http://jsfiddle.net/s5g4t/)成功和完成都被稱爲很好。 –