1

我使用闭包将其设置为 _this 在 ajax 成功中,但现在我当然失去了“响应”。有人知道在这种情况下检索响应数据的方法吗?

var form = {       
    name: 'great form',    
    load:function() {
        $.ajax({
        url: "get/data",
        type: "POST",
        success: function(_this){
                console.log(_this.name);     // outputs : "great form"
                console.log(response.data);  // response is undefined
        }(this)
    });
};
4

2 回答 2

2

您不想将参数更改为成功处理程序。成功处理程序的第一个参数是您的 ajax 响应数据,因此您需要这样对待它。

要访问this成功处理程序中的指针,有几种方法。我认为最优雅的一个是 jQuery 允许您将this要在成功回调中设置为的上下文作为$.ajax()函数的参数之一传递,如下所示:

var form = {       
    name: 'great form',    
    load:function() {
        $.ajax({
        context: this,      // sets 'this' pointer for success callback
        url: "get/data",
        type: "POST",
        success: function(response){
                console.log(this.name);      // outputs : "great form"
                console.log(response.data);  // ajax response data
        });
    });
};
于 2013-10-25T17:52:25.017 回答
1

您不希望_this作为成功函数的参数(并且您执行此操作的方式是立即调用该函数,而不是等待 jQuery 在成功时调用它),您将其创建为ajax调用旁边的变量:

var form = {       
    name: 'great form',    
    load:function() {
        var _this = this; // <=== Here
        $.ajax({
        url: "get/data",
        type: "POST",
        success: function(response){
                console.log(_this.name);     // outputs : "great form"
                console.log(response.data);  // response is undefined
        }
    });
};

当然,使用该代码,您可以只使用form.name,因为它是一次性对象。

更多的:

于 2013-10-25T17:08:24.827 回答