2011-12-22 13 views
1

私は、コールバックに渡すことを許可している関数を書きました。私はそれをajaxのrepsonseと別のパラメータの両方で実行したいと思います。コールバックと他のパラメータをjQuery ajaxの成功に渡す?

私の問題はコールバックが実行され、コードをステップ実行すると、関数が適切なパラメータで呼び出されたように見えますが、実際にコールバック関数にステップインするとき、 2番目の引数に割り当てられるものはすべてundefinedです。私はそれを実行すると、callback.call(/*the ajax response*/, 25);しかし

に解決するために

mynamespace.fetch($(this).attr('href'), 25, true, another namespace.createPost); 

私はcallback.call(msg, count)を期待:私はこのようにそれを呼び出すときに、今

namespace = { 
fetch : function(sr, count, callback) { 
    srCount = count ? count : '25' 
    var sub; 
    if (sr == 'frontpage'){ 
     sub = ''; 
    }else{ 
     sub = 'foo/' + sr + '/'; 
    }; 
    $.ajax({ 
     url: "http://www.example.com/"+sub+ ".json?count=" + count, 
     dataType: "json", 
     success: function(msg) 
     { 
      callback.call(msg, count) 
     } 
    }) 
}; 

:ここ

は私の関数であります、私は msg == 25count == 'undefined'を得ます。私は...

+0

'mynamespace.fetch($(this)).attr( 'href')、25、true、another namespace.createPost);'。本当ですか? –

+0

コピーして貼り付けた古いコードの残骸...実際には使用されていません。編集。 –

答えて

4

.callはそうcallback.call(msg, count)は、この呼び出しのコンテキストとしてセット(this値コールバック関数の内部msgでコールバック関数を呼び出して、最初の引数で与えられた明示的なコンテキストで関数を呼び出す理由のために途方に暮れてよ)とcountを第1引数として使用します。

したがって、callback(msg, count)またはcallback.call(namespace, msg, count);が必要です。つまり、コールバック内のthisはその呼び出しのためにnamespaceを参照します。

+0

別の言い方をすれば、 'call'はX + 1パラメータを受け入れます。最初は関数が実行する名前空間で、残りのXは変数に渡されますか? –

+0

@ChrisSobolewskiさて、ネームスペースによって、呼び出された関数の 'this'の値を意味するならば、渡された引数はどちらかの後に開始します。 https://developer.mozilla.org/ja/JavaScript/Reference/Global_Objects/Function/call – Esailija

1

$.ajax()関数には、この目的で使用できるコンテキストパラメータがあります。

$.ajax({ 
    url: "http://www.example.com/"+sub+ ".json?count=" + count, 
    context: "hello", 
    dataType: "json", 
    success: function(msg) 
    { 

    // here 'this' will be the 'hello' you specified for context while making the call. 

    callback.call(msg, count) 
    } 
}) 
関連する問題