我試圖在OO風格中使用Javascript,並且一種方法需要進行遠程調用以獲取一些數據,以便網頁可以使用它。我創建了一個Javascript類來封裝數據檢索,所以我可以在其他地方重複使用的邏輯,就像這樣:從jQuery Ajax方法返回值
AddressRetriever = function() {
AddressRetriever.prototype.find = function(zip) {
var addressList = [];
$.ajax({
/* setup stuff */
success: function(response) {
var data = $.parseJSON(response.value);
for (var i = 0; i < data.length; i++) {
var city = data[i].City; // "City" column of DataTable
var state = data[i].State; // "State" column of DataTable
var address = new PostalAddress(postalCode, city, state); // This is a custom JavaScript class with simple getters, a DTO basically.
addressList.push(address);
}
}
});
return addressList;
}
}
網頁本身調用此類似如下:
$('#txtZip').blur(function() {
var retriever = new AddressRetriever();
var addresses = retriever.find($(this).val());
if (addresses.length > 0) {
$('#txtCity').val(addresses[0].getCity());
$('#txtState').val(addresses[0].getState());
}
});
的問題是有時addresses
是莫名其妙的空(即長度= 0)。在Firebug中,XHR選項卡顯示一個響應,返回期望的數據,如果我在成功方法中設置了警報長度是正確的,但在該方法外面,當我嘗試返回值時,它有時(但並非總是)爲空,我的文本框沒有被填充。有時它顯示爲空,但文本框得到正確填充無論如何。
我知道我可以通過擺脫單獨的類並將整個ajax調用填充到事件處理程序中來完成此操作,但是我正在尋找一種方法來正確執行此操作,以便可以在必要時重用該功能。有什麼想法嗎?
可能重複[無法從jQuery Ajax調用獲取正確的返回值](http://stackoverflow.com/questions/3537434/cant -get-correct-return-value-from -a-jquery-ajax-call) – 2012-01-10 19:40:49
聽起來你需要在成功塊中包含一個「error:」處理程序並返回addressList。另外,因爲它是異步的。調用時,可以在ajax調用完成之前發生「返回地址列表」。 – 2012-01-10 19:50:26
[JavaScript異步返回值/賦值與jQuery]的可能重複(http://stackoverflow.com/questions/7779697/javascript-asynchronous-return-value-assignment-with-jquery) – 2012-01-10 19:52:56