2013-11-10 5 views
1

У меня есть qtip, контент которого зависит от других вещей, происходящих на веб-сайте, поэтому в данный момент, поэтому каждый раз, когда он нажимается, он должен извлекать новый контент с сервера. Я пытаюсь использовать AJAX для этого, как объясняют в qtip2's docs (см. Пример ajax).Как отключить кеширование в qtip2 ajax content

Проблема в том, что я не могу заставить ее показывать новую версию наконечника с каждым щелчком, он всегда показывает первый, поэтому я предполагаю, что это потому, что он был кэширован.

Это мой код для этого:

$('#myButton').qtip({ 

         content: { 
          text: function(event, api) { 

            $.ajax({ url: '/my/url', cache: false, data: {} }) 
             .done(function(html) { 
              api.set('content.text', html) 
             }) 
             .fail(function(xhr, status, error) { 
              api.set('content.text', status + ': ' + error) 
             }) 

            return 'Loading...'; 
           } 
          }, 

Как можно видеть, я поставил cache: false в АЯКС вызова. Я также попытался отключить общий кэш с $.ajaxSetup({cache: false}); до этого фрагмента кода, но ничего.

Любые идеи, почему это не работает?

ответ

2

Ну, я не знаю, было ли это лучшим способом сделать это (избегая qtip-кэширования было бы намного проще, на мой взгляд), но так я решил свою проблему, если кто-то сочтет это полезным:

  1. в текста выбору QTIP, просто оставить Loading... текст, не function()

  2. не используйте «шоу» событие, чтобы загрузить содержимое QTIP, Грабинг идентификатор DIV, что содержит содержимое и передает его в пользовательскую функцию

    events: { 
         show: function(event, api) { 
            var qtip_id = api.elements.content.attr('id'); 
            loadtQtipContent(qtip_id); 
           } 
        } 
    
  3. Это функция, которая загружает содержимое через AJAX:

    function loadtQtipContent(qtip_id) { 
    
        $('#' + qtip_id).empty(); //Empty the content before executing every request 
    
        $.get('/my/url', function(data) { 
         $('#' + qtip_id).html(data); 
        }); 
    } 
    

Вот оно!

0

Я опубликовал проблему github, потому что у меня была такая же проблема. Автор предложил установить «cache: false» на AJAX, но это все еще не сработало для меня.

Я уверен, что есть правильный способ обойти это.

Но вот еще один (и, вероятно, не столь эффективный) способ решить эту проблему, которая заключается в «уничтожении» qtip каждый раз, когда вы хотите обновить его содержимое AJAX.

Мой код выглядит, как показано ниже

function setTooltips() { 
    $(".myToolTips").qtip("destroy") 
    $(".myToolTips").each(function(i,j) { 
    $(j).qtip({ 
     content:{ 
     text:function(event, api) { 
      $.ajax() // your ajax function here... 
     } 
     } 
    }); 
    }); 
} 
0

Вы должны сделать несколько изменений в вашем qtip.content.text собственности: - вы должны «вернуться» объект $ .ajax - в свойство успеха $ .ajax вам нужно «вернуть» содержимое вместо использования функции api.set

для справки: http://qtip2.com/guides#content.ajax.continuous

Смежные вопросы