【发布时间】:2012-02-07 05:31:24
【问题描述】:
我正在尝试以 OO 风格使用 Javascript,一种方法需要进行远程调用以获取一些数据,以便网页可以使用它。我创建了一个 Javascript 类来封装数据检索,因此我可以在其他地方重用逻辑,如下所示:
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 调用填充到事件处理程序中来做到这一点,但我正在寻找一种方法来正确地做到这一点,以便在必要时可以重用该函数。有什么想法吗?
【问题讨论】:
-
听起来您需要在成功块中包含一个“错误:”处理程序并返回地址列表。另外,因为它是异步的。调用,“返回地址列表”可以在 ajax 调用完成之前发生。
标签: javascript jquery ajax