jQuery / Ajax - $ .ajax()将参数传递给回调 - 使用的好模式?

时间:2009-07-28 13:28:11

标签: javascript jquery ajax callback

我开始使用的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名称。

2 个答案:

答案 0 :(得分:94)

喜欢这个......

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

回答你的评论:Does use of anonymous functions affect performance?

答案 1 :(得分:30)

如果在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中,并返回回调函数,等待执行。