2009-07-28 15 views
73

JavaScriptコード私は次のコードで始まっています:

function doSomething(url) { 
    $.ajax({ 
     type: "GET", 
     url: url, 
     dataType: "xml", 
     success: rssToTarget 
    }); 
}  

パターン使用したいと思います:

//where elem is the target that should receive new items via DOM (appendChild) 
function doSomething(url, elem) { 
    $.ajax({ 
     type: "GET", 
     url: url, 
     dataType: "xml", 
     success: rssToTarget(elem) 
    }); 
} 

私はこのように動作するようにコールバックを得ることはできませんね。適切なパターンは何ですか?私は一時的にelemまたはelemの名前を保持するために必ずグローバル変数を使用したくありません。

+0

http://stackoverflow.com/questions/2602981/jquery-how-to-pass-additional-parameters-to-success-callback-for-ajax-call invokedataを使用する –

+0

今後の参考として:あなたが '$ .ajax()'に渡しているオブジェクトリテラルの 'success'プロパティ内のコールバック関数(' rssToTarget')は、jQueryがAJAX要求が完了した後にその関数を呼び出すことができます。関数名の最後に '(elem)'を追加すると、誤って 'rssToTarget'が呼び出され、戻り値が' success'に格納されます。 JSでは、関数名の最後に括弧を追加すると、それが呼び出されます。 – BrunoFacca

答えて

94

...

function doSomething(url, elem) { 
    $.ajax({ 
    type: "GET", 
    url: url, 
    dataType: "xml", 
    success: function(xml) { 
     rssToTarget(xml, elem); 
    } 
    }); 
} 

回答:あなたはrssToTarget関数内closureを作成する場合に使用したいDoes use of anonymous functions affect performance?

+3

aha +1。あらゆる場所でanon関数を作成するためのパフォーマンス価格を支払っていますか? – BuddyJoe

+2

そして私はそれが本当に....と思います成功:function(xml){rssToTarget(xml、elem); } – BuddyJoe

+0

あなたが同意すれば、回答を更新できますか?ありがとうございます。Josh – BuddyJoe

30

パターンは仕事ができる:

function rssToTarget(element) { 
    return function (xmlData) { 
    // work with element and the data returned from the server 
    } 
} 

function doSomething(url, elem) { 
    $.ajax({ type: "GET", 
     url: url, 
     dataType: "xml", 
     success: rssToTarget(elem) 
     }); 
} 

rssToTarget(elem)を実行すると、要素パラメータはclosureに格納され、コールバック関数はretur実行されるのを待っている。

+0

-1成功を関数を返す関数に設定することはできません。 –

+0

私は "パラメータが必要です"を追加するのを忘れました –

+3

もちろん、実行中のコードをチェックする関数を返すことができます! http://jsbin.com/anepo/edit – CMS

関連する問題