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

时间:2022-05-23 08:59:33

JavaScript code I'm starting with:

JavaScript代码:

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

Pattern I would like to use:

我想使用的模式:

//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)
   });
}  

I don't think I can get the callback to work this way, right? What is the proper pattern? I don't want to use global variables necessarily to temporarily hold the elem or elem name.

我不认为我能让回调这样工作,对吧?正确的模式是什么?我不想使用全局变量来临时保存elem或elem的名称。

2 个解决方案

#1


94  

Like this...

像这样…

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

Answer to your comment: Does use of anonymous functions affect performance?

回答你的评论:使用匿名函数会影响性能吗?

#2


30  

The pattern you'd like to use could work if you create a closure inside your rssToTarget function:

如果在rssToTarget函数中创建一个闭包,您希望使用的模式可以工作:

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)
       });
}

When rssToTarget(elem) is executed, the element parameter is stored in the closure, and the callback function is returned, waiting to be executed.

当执行rssToTarget(elem)时,元素参数存储在闭包中,返回回调函数,等待执行。

#1


94  

Like this...

像这样…

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

Answer to your comment: Does use of anonymous functions affect performance?

回答你的评论:使用匿名函数会影响性能吗?

#2


30  

The pattern you'd like to use could work if you create a closure inside your rssToTarget function:

如果在rssToTarget函数中创建一个闭包,您希望使用的模式可以工作:

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)
       });
}

When rssToTarget(elem) is executed, the element parameter is stored in the closure, and the callback function is returned, waiting to be executed.

当执行rssToTarget(elem)时,元素参数存储在闭包中,返回回调函数,等待执行。