JQuery Ajax подсказка

Я пытаюсь сделать всплывающую подсказку Ajax с помощью этого плагина jQuery: http://jquery.bassistance.de/tooltip/demo/

У меня есть такая вещь:

<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 ответа

Я столкнулся с той же проблемой. Здесь обнаружен умный метод, который динамически создает элемент в обратном вызове 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
});

Да, ваш код не будет работать асинхронно:

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 запрос.

Другие вопросы по тегам