好的,所以我有以下功能:
function add_like(post_id) {
$.post('php/like_add.php', {post_id:post_id}, function(data){
if (data == 'success') {
bump_get(photo_id).done(function(){
toggle_visibility('bump_img'+post_id);
});
} else {
alert(data);
}
});
}
当前正在运行,并且 php/like_add.php
echo 的success
正确。问题是,对于主 post 函数,我将 post_id 传递给它,但对于 .done(function()
; post_id 没有传递给它。所以id为toggle_visibility
正在变成“like_post_”而不是“like_post_x”。如何将变量从紧接其之前运行的函数传递给 .done 函数?
我试过bump_get(photo_id).done({photo_id:photo_id}, function(){
,但这不起作用。
有什么想法吗?
最佳答案
由于 JavaScript 中变量作用域和闭包的工作方式,正确的 post_id
值已在您的回调函数中可用。
当您调用 add_like()
时,会创建一个新作用域,并在该作用域中创建 post_id
变量,因为它是函数的参数。该范围内的变量在函数执行过程中可用,以及在函数结束后对于创建的任何匿名函数(闭包)都可用 - 例如您的回调。
作为概念验证,请参阅以下简化代码,您可以在此处使用 fiddle 运行:http://jsfiddle.net/R4HNx/
function add_like(post_id) {
setTimeout(function() {
alert(post_id);
}, 2000);
}
add_like(10);
这用一个简单的 setTimeout()
调用替换了 ajax 回调,但它是相同的概念 - 我们正在定义一个将在未来某个时刻运行的回调函数,并使用一个变量来自父函数,该函数将在回调实际运行之前很久就返回。
关于php - 将变量传递给 .done(function(),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/17902155/