2
function firstCallme(iWantToBePassed) {

   post(callbackFun);
}

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

 alert(iWantToBePassed);
}

如何将变量iWantToBePassedfirstCallme()传递给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

4 回答 4

2

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

您还可以发布参数iWantToBePassed并从回调函数中发布的数据中检索它。但除非您在服务器上需要该参数,否则我不会推荐这条路线。

于 2012-12-27T12:22:08.943 回答
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 文档

于 2012-12-27T12:11:20.633 回答
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);
});
于 2012-12-27T12:18:35.203 回答
0

改写post为:

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

并称它为:

function firstCallme(iWantToBePassed) {
  post(callbackFun, iWantToBePassed);
}
于 2012-12-27T12:24:16.310 回答