让jQuery返回一个ajax对象

时间:2010-03-08 22:56:20

标签: jquery ajax refactoring

问题标题有点奇怪,因为我不确定如何说出问题。问题是我有许多链接要将click事件与ajax调用绑定在一起,我只是想将一些重复的代码重构到一个区域。

我试图绑定ajax调用的链接只有一个区别于它们的东西,而这是来自先前声明的对象的id。所以我有很多看起来像这样的代码:

$("a.link").bind('click', function() {
           id = obj.id; 
           $.ajax({ 
                   url: "/set/" + id, 
                   dataType: 'json', 
                   type: "POST" 
           }) 
    });

我试图将它重构成这样的东西:

$(“a.link”)。bind('click',ajax_link(obj.id));

 function ajax_link(id) {
      $.ajax({ 
             url: "/set/" + id, 
             dataType: 'json', 
             type: "POST" 
      }) 
 });

但是,正如您可以想象的那样,当元素与click事件绑定时,这实际上只是进行了ajax调用。

有没有一种简单的方法来重构这段代码,这样我就可以将常见的ajax代码提取到自己的函数中,并希望减少当前脚本中jQuery的行数?

2 个答案:

答案 0 :(得分:3)

这应该做你想要的:

$("a.link").click(make_ajax);

function make_ajax() {
  $.ajax({ 
    url: "/set/" + id, 
    dataType: 'json', 
    type: "POST" 
  });
}
在这种情况下,

this指的是事件的来源是被点击的链接。

也可以定义一个闭包:

$("a.link").click(function() {
  make_ajax(this.id)();
});

function make_ajax(id) {
  return function() {
    $.ajax({ 
      url: "/set/" + this.id, 
      dataType: 'json', 
      type: "POST" 
    });
  };
}

但我不认为这对你的例子有帮助。

答案 1 :(得分:0)

你总是可以在绑定的点击功能中调用ajax_link,

$("a.link").bind('click', function() {
  ajax_link(obj.id);
});