2010-08-07 5 views
2

J'essaie de faire infobulle Ajax via ce plugin jQuery: http://jquery.bassistance.de/tooltip/demo/jQuery Ajax infobulle

J'ai quelque chose comme ceci:

<p id="foottip"> 
    <span href="/last_votes/6">footnote</span>. 
</p> 

<script type="text/javascript"> 
    $(function() { 
    $("#foottip span").tooltip({ 
     bodyHandler: function() { 
     //dj ajax here and cache 
     var tip = '' 
     var url = $(this).attr("href"); 

     $.ajax({ 
      url:url, success:function(html){tip = html;}, async:false 
     }); 

     return tip 
     }, 

     showURL: false 
    }); 
    }) 
</script> 

je le fais avec une requête asynchrone Ajax, mais la solution a un problème, parfois il redirige la page. Cela semble être un bug. Comment puis-je faire une info-bulle Ajax avec une requête asynchrone? Je n'arrive pas à trouver le moyen de transmettre le résultat à l'info-bulle de manière asynchrone.

Répondre

2

Oui, votre code ne fonctionnera pas de manière asynchrone:

var tip = '' 
var url = $(this).attr("href"); 
$.ajax({ 
    url:url, success:function(html){tip = html;}, async:true 
}); 

// -- The problem here is that your bodyHandler function will return 
// -- immediately, before the AJAX callback is called. 
return tip 

Pour résoudre ce problème, vous pouvez avoir à mettre votre code infobulle de rendu dans le rappel success de votre demande $.ajax.

+0

Ajax est appelé synchrone (async: false). Il attend le retour. Mais comme je suis triste, il a un bug de cette façon. Je ne comprends pas comment mettre l'initialisation de l'info-bulle à l'intérieur de succès. Parce que l'infobulle doit appeler ma requête ajax. – Evg

+0

Il est un peu étrange .. parce que je dois lier mon ajax d'abord sur l'événement hover, puis faire sur l'initialisation tooltip de retour .. mais je vais l'essayer) – Evg

+0

je ne sais pas quoi onhover fonctionnera pour info-bulle. Je veux dire je déplace la souris sur la zone, onhover est fait, ajax faire le traitement, init tooltip, mais non sur hover pour l'info-bulle (parce que c'est déjà fait). Et pas de vrai résultat. Je pense que tooltip init doit être le premier de toute façon. – Evg

3

J'ai fait face au même problème. Découvert une technique intelligente here qui crée dynamiquement un élément dans le callback bodyHandler, puis met à jour dans l'appel AJAX pour obtenir l'effet désiré.

Appliqué au problème ci-dessus:

$("#foottip span").tooltip({ 
    bodyHandler: function() { 
     var url = $(this).attr("href"); 
     var tip = $("<span/>").html("loading tip..."); 

     $.ajax({ 
      url: url, 
      success: function(html){ tip.html(html); } 
     }); 

     return tip; 
    }, 
    showURL: false 
});