【问题标题】:Retrieving response while preserving scope of "this" with jquery ajax检索响应,同时使用 jquery ajax 保留“this”的范围
【发布时间】:2013-11-04 21:52:38
【问题描述】:

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

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

【问题讨论】:

    标签: jquery ajax closures jscript


    【解决方案1】:

    您不想将参数更改为成功处理程序。成功处理程序的第一个参数是您的 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
            });
        });
    };
    

    【讨论】:

    • 太棒了!!不敢相信我以前从来不知道上下文参数。回到这个,没有更多的!谢谢!!
    【解决方案2】:

    您不希望 _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,因为它是一次性对象。

    更多:

    【讨论】:

      猜你喜欢
      • 2011-11-29
      • 2022-01-15
      • 2015-02-19
      • 1970-01-01
      • 1970-01-01
      • 2012-09-23
      • 1970-01-01
      • 1970-01-01
      • 2016-06-19
      相关资源
      最近更新 更多