我有一个推迟问题,我想知道是否有一个好方法来处理
这是我的代码:
getFullAddressFromId: function (contactId) {
var contact;
$.ajax({
url: "/WebServices/FormOverview.asmx/GetFullAddressfromId",
data: { id: contactId},
success: function (result) {
contact = result;
},
error: function (err) {
_local.sendNotification.apply(this, ['Failed to load address information', 'Error']);
}
});
};
return contact;
}
这里的问题显然是因为web服务尚未完成运行,所以当它命中return语句时,它不会加载“contact”。
如何推迟从此函数返回(getFullAddressFromId)以等待webserbvice。
答案 0 :(得分:6)
使用异步编程技术。
var getFullAddress = function(id, callback) {
$.ajax({
...
success: function(result) {
// stuff
callback(result);
}
});
}
或者使用deferred objects和jQuery 1.5 +
var getFullAddress = function(id) {
return $.ajax({
...
});
}
getFullAddress("22").done(function() {
// handle result
});
答案 1 :(得分:0)
让你期望一个回调函数作为它的第二个参数,并在AJAX请求成功时调用该回调:
getFullAddressFromId: function (contactId, callback) {
$.ajax({
url: "/WebServices/FormOverview.asmx/GetFullAddressfromId",
data: { id: contactId },
success: callback,
error: function (err) {
_local.sendNotification.apply(this, ['Failed to load address information', 'Error']);
}
});
}
答案 2 :(得分:0)
getFullAddressFromId: function (contactId) {
var contact;
$.ajax({
url: "/WebServices/FormOverview.asmx/GetFullAddressfromId",
data: { id: contactId},
success: function (result) {
contact = result;
},
error: function (err) {
_local.sendNotification.apply(this, ['Failed to load address information', 'Error']);
},
async: false
});
};
return contact;
}
但是你不想使用它,因为浏览器窗口很可能会等待Web服务器。去寻找异步的。