我试图在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