将对象的引用传递给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中的回调函数[重复]的主要内容,如果未能解决你的问题,请参考以下文章
在 Python 中实现回调 - 将可调用引用传递给当前函数