如何将变量传递给回调函数

时间:2012-12-27 12:07:15

标签: jquery callback

function firstCallme(iWantToBePassed) {

   post(callbackFun);
}

// This function shouldn't be anonymous.
function callbackFun(dataFromPostFun) {

 alert(iWantToBePassed);
}

如何将变量 iWantToBePassed firstCallme()传递给 callbackFun()? SO中有几个类似的问题。但我无法从中找出解决方案。

我只知道下面给出的一个解决方案:

function firstCallme(iWantToBePassed) {

   post(function(data){callbackFun(data,iWantToBePassed) });
}

// This function shouldn't be anonymous.
function callbackFun(dataFromPostFun, iWantToBePassed) {

 alert(iWantToBePassed);
}

有没有更好的解决方案?

更新:

这里:

function post(callbackFun) {
  jQuery.post('url', 'data', callbackFun, 'json');    
}

4 个答案:

答案 0 :(得分:2)

由于在post之后调用了回调函数,因此将参数传递给回调函数的唯一方法是使用某种形式的Closure,就像您在问题中提到的解决方案中所示。

您还可以发布参数iWantToBePassed并从回调函数中帖子中的数据中检索它。但除非您在服务器上需要该参数,否则我不建议使用此路由。

答案 1 :(得分:1)

只需调用带有参数to的callbackFun函数即可。

函数之后的参数是发布的,你不必告诉JavaScript浏览器发帖,它已经知道它必须在括号之间声明它时将一个变量发送(传递)给一个函数。

function firstCallme(iWantToBePassed) {
    callbackFun(iWantToBePassed);
}

function callbackFun(dataFromPostFun) {
   alert(dataFromPostFun);
}

*编辑:

jQuery.post函数是一个异步的javascript调用(用于获取没有页面加载的数据)。

因此,当使用jQuery.post时,您可以将参数传递给php脚本,例如从中获取答案。例如,$ .ajax()就是一个简写函数。

使用jQuery.post将'data'发送到'url','callbackFunction'是处理答案的函数。你问题中的'json'是数据类型。

在你的情况下,这将是这样的:

function firstCallme(postData){
    jQuery.post("url.php", postData, callbackFun(data), "json");
}

callbackFun(successData){
    console.log(successData);
}

jquery.post documentation

答案 2 :(得分:0)

以这种方式试试:http://jsfiddle.net/6WxfF/

function firstCallme(iWantToBePassed) {
    callbackFun(iWantToBePassed);
}

function callbackFun(dataFromPostFun) {
    post(dataFromPostFun);
}

function post(callbackFun) {
    jQuery.post('url', 'data', callbackFun, 'json');    
}

$(function() {
    var hel = "Hello";
    firstCallme(hel);
});

答案 3 :(得分:0)

post重写为:

function post(callbackFun, param) {
  jQuery.post('url', 'data', function() { callbackFun(param); }, 'json');    
}

并称之为:

function firstCallme(iWantToBePassed) {
  post(callbackFun, iWantToBePassed);
}