3

可能重复:
$.ajax 上下文选项

我有一些看起来像这样的代码:

$.post(self.baseUrl + 'api/method',
        {param1: data},
        function (response) {
            // Do something
        });

我想将 self 对象的引用传递给回调,我想象它会是这样的:

$.post(self.baseUrl + 'api/method',
        {param1: data},
        function (response, self) {
            // Do something
        });

但是,它不是这样工作的,jQuery 文档没有显示可以实现这一点的方法,并且粗略的 Google 搜索也没有找到任何东西。这可能吗,我该怎么做?

4

3 回答 3

5

如果您使用该$.ajax方法,您可以指定一个上下文:

$.ajax({
    type: "post",
    context: self,
    data: {param1: data},
    success: function (response) {
        console.log(this); // now 'this' refers to self

    }
});
于 2012-09-20T11:24:10.643 回答
1

@karim79 展示了最佳解决方案。我只是想展示一些其他可能的方式

var App = {
    baseUrl: "http://.../",
    fetchData: function() {
        var self = this;
        $.post(self.baseUrl + 'api/method', {
            param1: data
        }, function(data) {
            self.onDatafetch(data);
            //or
            globalDataFetch(data, self);
        });
    },
    onDatafetch: function(data) {
        this.showMsg();
    },
    showMsg: function() {
        alert("Success");
    }
}

App.fetchData();

function globalDataFetch(data, object){
   // received data and object
}
于 2012-09-20T11:34:40.487 回答
0

你为什么要那样做?

您可以轻松使用闭包:

var param1 = data;
$.post(self.baseUrl + 'api/method', function (data) {
    // access param1 here
});
于 2012-09-20T11:22:21.947 回答