2
function firstCallme(iWantToBePassed) {

   post(callbackFun);
}

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

 alert(iWantToBePassed);
}

変数iWantToBePassedfirstCallme()からcallbackFun()に渡す方法は? SOにはいくつかの同様の質問があります。しかし、そこから解決策を特定できませんでした。

以下に示すように、私は1つの解決策しか知りません:

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

コールバック関数はその後に呼び出されるため、コールバック関数postにパラメーターを渡す唯一の方法は、質問で言及したソリューションで示したような何らかの形式のクロージャーを使用することです。

パラメータiWantToBePassedを投稿して、コールバック関数の投稿のデータから取得することもできます。ただし、サーバーでそのパラメーターが必要でない限り、このルートはお勧めしません。

于 2012-12-27T12:22:08.943 に答える
1

パラメータを渡して 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 に答える