2

私は ajax 呼び出しからデータを取得しようとしていて、コードを使用していました

jQuery.ajax({
        type: 'POST',
        url: '/chatlog',
        success: exoticlangAjaxCompleted,
        data:'messageLog=' + privateMessageLogJson,
        dataType: 'json'
    });

データは JSON 配列でした (キー = "messageLog")

呼び出しがうまくいった理由

    success: exoticlangAjaxCompleted,

だがしかし

    success: exoticlangAjaxCompleted(),

また

    success: exoticlangAjaxCompleted(messageLog) ??

JS 関数は次のとおりです。

function exoticlangAjaxCompleted(messageLog){
    console.log('exoticlangAjaxCompleted!');
    console.log('chat log is: ' + messageLog);
    console.log('chat log is: ' + dump(messageLog));
}
4

4 に答える 4

4

The success argument expects a reference to function that will be invoked when the AJAX request is complete.

With the following:

success: exoticlangAjaxCompleted,

You are passing a reference to a function as required.

Whereas in this instance:

success: exoticlangAjaxCompleted(),

You are invoking your exoticlangAjaxCompleted function and passing the result to the success argument. Unless your function returns a function, this will not work!

于 2012-08-24T05:47:19.963 に答える
2

前者の構文が機能する理由successは、(必要に応じて引数を指定して呼び出すために) 関数オブジェクトが必要であり、関数を呼び出すだけでは関数オブジェクトが返されないためです。function()フォームで関数を呼び出すと、出力が生成されます(出力が未定義であっても)。これが、このフォームが機能する理由でもあります。

...
success: function() {
    // Some callback code
}
...

それで、それらはどのように違うのですか?その方法を示すために、WebKit コンソールを見てみましょう。

WebKit コンソール、myFunc と myFunc() を示す画像

ご覧のとおり、実行すると関数自体myFunc返されますが、 **には役に立たないオブジェクトが返されます。myFunc()select:

于 2012-08-24T05:53:02.180 に答える
0

私の理解では、この方法で引数を渡すことはできません。

これを試してみると:

success: function(){exoticlangAjaxCompleted(messageLog);},

それならうまくいくかもしれません。

于 2012-08-24T05:45:52.393 に答える
0

Jquery のドキュメントから、成功のコールバックに関するセクションを次に示します。

「リクエストが成功した場合に呼び出される関数。関数には 3 つの引数が渡されます。dataType パラメータに従ってフォーマットされたサーバーから返されたデータ、ステータスを説明する文字列、jqXHR (jQuery 1.4.x では XMLHttpRequest)」です。物体。"

jQuery.ajax()

したがって、次のようなトリックを作成する必要があります: 追加パラメータのパターン

success: function(..){
...
}
于 2012-08-24T05:53:55.400 に答える