php - 将变量传递给 .done(function()

标签 php javascript ajax function post

好的,所以我有以下功能:

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/

相关文章:

php - 仅回显匹配精确字符串的结果 (PHP)

javascript - 如何在 FireFox 中聚焦 IFRAME?

javascript - 使用柜台在社交媒体上分享网页

javascript - 解析通过 JavaScript 从 AJAX 请求获得的 JSON 响应

php - JSON 响应中未定义的属性

php - Stripe webhook 测试返回 http 500 错误

php - 出现错误 '#1111 - Invalid use of group function'

javascript - meteor : Changes in collections are not reflected in rendered HTML

php - 如何仅使用 Javascript (AJAX) 处理一篇文章?

php - 使用 PHP mysql AJAX 创建依赖下拉列表不起作用