如果我的对象myApi
具有execute
功能
var api = new myApi();
api.execute();
我在execute
内{* that
是myApi
个实例)
function execute() {
$.ajax({
type: this.getRequestMethod(),
data: this.getDataParams(),
complete: function(xmlHttp){
that.setResult(jQuery.parseJSON(xmlHttp.responseText));
that.setHttpStatus(xmlHttp.status);
},
url: this.getUrl(),
beforeSend: setHeader
});
}
如何进行回调/监听,以便我可以这样做
var api = new myApi();
api.execute();
var result = api.getResult();
var statusCode = api.getStatusCode();
switch(statusCode) {...};
如果我这样离开,那么在ajax
调用完成之前执行这两个底部的两行(complete
尚未调用),所以我有undefined
个变量。
答案 0 :(得分:1)
你不能这样做,除非你强迫AJAX请求同步(这可能是一个坏主意)。你需要附加一些回调方法,你也可以使用一些jQuery Deferred
魔法。
因此,请返回封装jqXHR
的<{1}}对象:
Deferred
然后像
一样使用它function execute() {
return $.ajax({
type: this.getRequestMethod(),
data: this.getDataParams(),
complete: function(xmlHttp){
that.setResult(jQuery.parseJSON(xmlHttp.responseText));
that.setHttpStatus(xmlHttp.status);
},
url: this.getUrl(),
beforeSend: setHeader
});
}