将对象的引用传递给jQuery中的回调函数[重复]

Posted

技术标签:

【中文标题】将对象的引用传递给jQuery中的回调函数[重复]【英文标题】:Passing a reference to an object to a callback function in jQuery [duplicate] 【发布时间】:2012-09-12 18:09:24 【问题描述】:

可能重复:$.ajax context option

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

$.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 搜索也没有找到任何东西。这可能吗?我该怎么做?

【问题讨论】:

你想用那个对象做什么? @jhonraymos 递归调用包含这段代码的方法 @AndreasNiedermair 我投票反对关闭这个 - 它问的是非常相似的事情,但问题来自不同的方向。这个问题需要一个解释有一个上下文选项的答案,而建议的副本是询问如何使用该上下文。 【参考方案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

【讨论】:

【参考方案2】:

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

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

    
);

【讨论】:

谢谢。这正是我所追求的。【参考方案3】:

你为什么要那样做?

你可以很容易地使用闭包:

var param1 = data;
$.post(self.baseUrl + 'api/method', function (data) 
    // access param1 here
);

【讨论】:

这是在self变量所代表的对象的一个​​方法里面,而在callback里面我其实是递归调用这个方法的,所以需要传递一个引用。 实际上,如果您在递归调用之后,您不需要参考。只要记住范式:范围的每个变量都可以从每一行(在该范围内)获得,无论它在哪里声明 - 这是因为编译器将声明移到顶部(但不是赋值,这可能会在稍后完成) - 见这个例子jsfiddle.net/dittodhole/x359K 顺便说一句...递归可以,不是在每种情况下,都可以用堆栈代替-因此这可能是实现的更好选择... 尽管如此:您不需要context - 这可以通过闭包来完成!只需引入一个新变量(并查看我的小提琴以获得更多提示)......

以上是关于将对象的引用传递给jQuery中的回调函数[重复]的主要内容,如果未能解决你的问题,请参考以下文章

将对象引用传递给java混淆中的方法[重复]

在 Python 中实现回调 - 将可调用引用传递给当前函数

js中的回调函数

将c ++引用的地址传递给指针

如何将指针分配给函数中的新对象,而该对象在退出后不会消失[重复]

使用引用将结构传递给函数时出错[重复]