2010-08-07 49 views
2

我試着通過這個jQuery插件做的Ajax工具提示:http://jquery.bassistance.de/tooltip/demo/jQuery的阿賈克斯提示

我有一些事情是這樣的:

<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> 

我有一個異步Ajax請求做到這一點,但解決的辦法有問題,有時它會重定向頁面。這似乎是一個錯誤。我如何使用異步請求執行Ajax工具提示?我無法找到將結果異步傳遞給工具提示的方法。

回答

2

是的,你的代碼不會以異步方式工作:

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 

爲了解決這個問題,你可能不得不把你的工具提示渲染代碼的success回調您$.ajax要求內。

+0

Ajax的被稱爲同步(異步:假)。它等待回報。但是,正如我傷心這樣有一個錯誤。我不明白如何將工具提示初始化內部。因爲工具提示必須調用我的ajax請求。 – Evg 2010-08-07 17:13:43

+0

這有點奇怪..因爲我必須首先綁定我的ajax懸停事件,然後做返回tooltip初始化..但我會嘗試它) – Evg 2010-08-07 17:18:41

+0

我不知道什麼onhover將工具提示。我的意思是我在區域上移動鼠標,onhover完成,ajax做處理,初始化工具提示,但沒有懸停工具提示(因爲它已經完成)。並沒有真正的結果。無論如何,我認爲tooltip init必須是第一個。 – Evg 2010-08-07 17:22:09

3

我對付同樣的問題。發現了一個聰明的技巧here,它在bodyHandler回調中動態創建一個元素,然後更新AJAX調用中的元素以整齊地實現所需的效果。

隨着施加到上述問題:

$("#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 
});