web-dev-qa-db-ja.com

jQuery / Ajax-コールバックにパラメーターを渡す$ .ajax()-使用する良いパターン?

私が始めている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の名前を一時的に保持する必要はありません。

73
BuddyJoe

このような...

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

コメントへの回答: 匿名関数の使用はパフォーマンスに影響しますか?

95
Josh Stodola

RssToTarget関数内で closure を作成すると、使用したいパターンが機能します。

_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 に保存され、実行を待機するコールバック関数が返されます。

30
CMS