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

Bud*_*Joe 73 javascript ajax jquery callback

我开始使用的JavaScript代码:

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

我想使用的模式:

//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)
   });
}  
Run Code Online (Sandbox Code Playgroud)

我不认为我可以通过这种方式获得回调,对吗?什么是正确的模式?我不想使用全局变量来暂时保存elemor elem名称.

Jos*_*ola 95

像这样...

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

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

  • 啊哈+1.你是否支付任何性能价格来创建无处不在的功能? (3认同)
  • 我想这真的是......成功:function(xml){rssToTarget(xml,elem); } (2认同)

CMS*_*CMS 30

如果在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)
       });
}
Run Code Online (Sandbox Code Playgroud)

rssToTarget(elem)被执行时,元件参数被存储在闭合,和回调函数返回,等待被执行.

  • 当然你可以返回一个函数检查代码运行!http://jsbin.com/anepo/edit (3认同)
  • 返回的匿名函数有一个输入参数... JavaScript功能允许您使用函数执行此操作... (3认同)