0
我試圖使用jQuery when
函數,爲了等到一個Ajax請求完成,然後再繼續前進,但是顯然出錯了。jQuery推遲不工作對我?
我的控制檯輸出看起來是這樣的:
geocodeMaster
geocode Canary Wharf
Object
geocode
Object
address is blank, returning 51.501885 -0.190894
proceeding
Uncaught TypeError: Cannot read property '0' of undefined
Object
Object
最後兩個對象是從第二個呼叫到geocode
輸出。爲什麼代碼在第二次調用的輸出之前顯示proceeding
?
我的代碼如下所示:
function geocode(address, geodata) {
console.log('geocode', address, geodata);
geodata['street'] = address;
if (address=="") {
console.log('address is blank, returning ' + current_latlng[0], current_latlng[1]);
return [current_latlng[0], current_latlng[1]];
}
$.ajax({
url: CS_API + 'geocoder.json',
data: geodata,
dataType: 'jsonp',
jsonpCallback: 'places',
success: function(from_data) {
console.log(from_data);
if (from_data.results.result!=undefined){
var from_result = from_data.results.result;
console.log(from_result)
return [from_result.latitude, from_result.longitude];
} else {
return false;
}
},
error: function(data) {
return false;
}
});
}
function geocodeMaster(place_from,place_to) {
console.log('geocodeMaster');
geodata['key'] = CS_API_KEY;
if (current_latlng!=null) {
geodata['n'] = current_latlng[0] + 0.1;
geodata['e'] = current_latlng[1] + 0.1;
geodata['s'] = current_latlng[0] - 0.1;
geodata['w'] = current_latlng[1] - 0.1;
}
var start_coords,finish_coords;
$.when(start_coords=geocode(place_from,geodata),finish_coords=geocode(place_to,geodata)).then(function(){
console.log('proceeding');
console.log(start_coords[0],start_coords[1],finish_coords[0],finish_coords[1]);
});
}
那是提供給when()
對象的問題不是遞延對象?如果是這樣,我怎麼能讓他們進入延期對象,同時保持我需要收集的信息 - start_lat等?
我很想把它包裝在一個函數中,否則我會重複所有代碼給Ajax geocoder兩次,這並不理想。這是否有可能? – Richard
查看我的上次編輯。 –
非常感謝! – Richard