2010-03-08 12 views
0

Le titre de la question est un peu étrange car je ne suis pas sûr de la façon de formuler le problème. Le problème est que j'ai beaucoup de liens auxquels je veux lier un événement click avec un appel ajax, et je cherche juste à refactoriser du code dupliqué dans une seule zone.Obtention de jQuery pour renvoyer un objet ajax

Les liens que j'essaye de lier un appel d'ajax seulement ont une chose qui les différencie, et c'est un id d'un objet précédemment déclaré. J'ai donc beaucoup de code qui ressemble à ceci:

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

je tentais de factoriser dans quelque chose comme ceci:

$ ("a.link") se lient (clic, ajax_link (. obj.id));

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

Cependant, comme vous pouvez l'imaginer, cela fait juste fait l'appel ajax lorsque l'élément est binded avec l'événement click.

Existe-t-il un moyen facile de refactoriser ce code afin que je puisse extraire le code ajax commun dans sa propre fonction, et j'espère réduire le nombre de lignes de jQuery dans mon script actuel?

Répondre

3

Cela devrait faire ce que vous voulez:

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

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

this dans ce cas, fait référence à la source de l'événement étant le lien qui a été cliqué.

Il est également possible de définir une fermeture:

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

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

mais je ne pense pas qui aide vraiment dans votre exemple.

0

Vous pouvez toujours mettre l'appel à ajax_link dans la fonction clic lié,

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

Questions connexes