2011-06-15 5 views
0

J'ai une petite boîte dans ma barre latérale peuplée d'ajax. J'ai 2 fonction ajax: on ajoute des éléments à la liste et la seconde les supprime si l'utilisateur clique sur le bouton de suppression. Mon html est simple liste non ordonnée comme ceci:Ajax fonction, appel en direct?

<ul id="listaruta" class="lista"> 
     <li>Item</li> 
     <li>Item</li> 
</ul> 

Chaque fois que j'appelle l'une des deux fonctions, ils remplaceront la liste ul avec une mise à jour (sélection des articles de la base de données après l'insertion ou la suppression). Ils fonctionnent bien jusqu'à ce que je veux supprimer juste après avoir inséré un élément à la liste.

Ma fonction ajax pour insérer (l'autre est très similaire):

var valor=$("#alcrearuta").attr('class'); 
$("#alcrearuta").click(function(){ 
    $.ajax({ 
     type: "GET", 
     url: "../ajax/ruta.php", 
     data: "url=" + valor, 
     dataType: 'html', 
     success: function(data) { 
      $("#listaruta").html(data); 
     } 
    });   
}); 

Mon fichier ruta.php me donne une autre liste ul avec la même structure que l'original, juste avec les éléments mis à jour. Pour autant que je comprenne cela, puisque je mets à jour le ul via ma fonction ajax, l'autre fonction ne sait pas que la liste a été mise à jour, elle "se souvient" seulement de la liste plus ancienne donc elle ne fait rien. Si je rafraîchis la page, elle sera supprimée sans problème. Je suppose que cela serait résolu en utilisant live()? Mais je n'ai aucune idée ...

EDIT: Ok maintenant je peux obtenir mon appel ajax pour travailler, sauf que quand je supprime juste après que je mets à jour, la valeur que je passe au fichier ruta.php (la variable qui m'aidera à trouver le champ que j'ai besoin de supprimer de la base de données) sera définie sur 'undefined' en me donnant une requête comme ceci: Select id from poi où url = 'undefined'

Encore une fois, si je recharge, ça va marcher. Le changement que je l'ai fait à la fonction ajax était:

$("#alcrearuta").live('click',function(){ 
    $.ajax({ 
        .... 
     }); 
    }); 

Répondre

2

Le problème est que vous enregistrez la valeur de l'attribut au début de la demande, vous devez enregistrer en cas de clic:

$("#alcrearuta").click(function(){ 
    var valor=$(this).attr('class'); 
    $.ajax({ 
     type: "GET", 
     url: "../ajax/ruta.php", 
     data: "url=" + valor, 
     dataType: 'html', 
     success: function(data) { 
      $("#listaruta").html(data); 
     } 
    });   
}); 

Espérons que cela aide.

+0

Cela a fait une différence, il supprime maintenant, mais il obtient une valeur erronée pour valor, il prend l'URL du premier élément de la liste au lieu de celui que je clique. –

+0

Devrais-je utiliser $ (this) .attr ('class'); au lieu? –

+0

Ouais, c'était ce dont j'avais besoin et maintenant c'est la bonne valeur. Je vous remercie. –