ajax()
を使用して応答のコールバックを取得することを検討してきまし$.when
たが、これがどのように完全に機能するかはまだわかりませんが、これは私が以下でやりたいことです。
ユーザーが行ごとに町と国を追加すると、応答が返され、ループ.ajax()
の外で使用できるように配列がプッシュされます。.each()
現時点では、ここの jsbinで、button
最初に を押すと、console.log の応答が[]
表示され、もう一度押すとアドレスが表示されることがわかります。次に、3回目のプレスでアドレスが再度追加されますが、これは発生しないはずです。
jQuery
var addresses,town;
var arrayLocation = [];
$('button').click(function(){
addresses = function() {
deferred = new $.Deferred();
var arrayOfLines = $('#gps').val().split('\n');
$.each(arrayOfLines, function(index, item) {
town = item.split(',');
$.ajax({
url: 'http://maps.googleapis.com/maps/api/geocode/json?address='+town[0]+'&sensor=false',
dataType: 'json',
success: function (data) {
add = data.results[0].address_components[0].long_name;
lat = data.results[0].geometry.location.lat;
lng = data.results[0].geometry.location.lng;
arrayLocation.push("['"+add+"', "+lat+", "+lng+"]");
console.log("['"+add+"', "+lat+", "+lng+"]");
}
});
});
return arrayLocation;
};
$.when(addresses()).then(function(arrayLocation){
console.log(arrayLocation);
});
});