【发布时间】:2013-11-20 10:48:02
【问题描述】:
一直在研究使用$.when 获取ajax() 响应的回调我仍然不确定这是如何完全工作的,但这就是我希望下面做的事情。
当用户每行添加城镇和国家/地区时,它会转到 .ajax() 中的 url,我会收到响应,它会将数组推送到 .each() 循环之外可用。
目前您会在 here at jsbin 内部看到,当首先按下button 时,console.log 中的响应是[],然后当我再次按下它时,地址就会出现。然后第三次按下将再次添加不应该发生的地址。
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);
});
});
【问题讨论】:
-
相关:Pass in an array of Deferreds to $.when(),但它需要是延迟数组,而不是具有(尚不存在)响应的数组
标签: javascript jquery ajax asynchronous .when