You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何向$.ajax的success函数传递对象以更新实例成员

解决Caller对象中$.ajax success函数更新成员的问题

这是个很常见的JavaScript上下文绑定问题,我来给你几种靠谱的解决方案,都能帮你把Caller实例传递到success函数里完成成员更新:

方法1:提前保存当前实例的引用(经典兼容方案)

在makeRequest方法里,先把当前Caller实例的this存到一个变量(比如self或that),这样在success回调里就能通过这个变量访问实例的成员了。这个方法兼容性极好,适合所有JavaScript环境:

function Caller() {
    this.data1 = 0;
    this.data2 = 1;
    this.makeRequest = function () {
        var self = this; // 保存当前Caller实例的引用
        $.ajax({
            url: "some url",
            data: somedata,
            dataType: "json",
            success: function ( data ) {
                // 用self访问Caller实例的成员
                self.data1 = data.data1;
                self.data2 = data.data2;
            }
        });
    };
}

方法2:使用jQuery ajax的context参数

jQuery的$.ajax提供了context选项,专门用来指定回调函数中的this指向。直接把当前Caller实例(也就是this)传给context,这样success函数里的this就会指向Caller实例:

function Caller() {
    this.data1 = 0;
    this.data2 = 1;
    this.makeRequest = function () {
        $.ajax({
            url: "some url",
            data: somedata,
            dataType: "json",
            context: this, // 指定success回调的this为当前Caller实例
            success: function ( data ) {
                // 这里的this就是Caller实例
                this.data1 = data.data1;
                this.data2 = data.data2;
            }
        });
    };
}

方法3:使用ES6箭头函数(简洁现代方案)

如果你的项目环境支持ES6+语法,箭头函数会是最简洁的选择。箭头函数不会创建自己的this上下文,它会继承外层作用域的this,所以success里的this直接就是Caller实例:

function Caller() {
    this.data1 = 0;
    this.data2 = 1;
    this.makeRequest = function () {
        $.ajax({
            url: "some url",
            data: somedata,
            dataType: "json",
            success: ( data ) => {
                // 箭头函数继承外层的this,也就是Caller实例
                this.data1 = data.data1;
                this.data2 = data.data2;
            }
        });
    };
}

你可以根据自己项目的兼容性要求和代码风格来选择合适的方法~

内容的提问来源于stack exchange,提问作者Septien

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.25 03:37:16