jQuery AJAX监听器

时间:2012-03-11 22:05:09

标签: javascript jquery ajax

如果我的对象myApi具有execute功能

var api = new myApi();
api.execute();

我在execute内{* thatmyApi个实例)

    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个变量。

1 个答案:

答案 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
    });
}