2013-11-10 39 views
1

我有一个qtip,其内容依赖于网站上发生的其他事情,因此在给定时间,因此每次点击时应该从服务器检索新内容。我正在尝试使用AJAX,作为qtip2's docs中的解释(请参阅ajax示例)。如何禁用qtip2中的缓存ajax内容

问题是,我不能让它显示每个点击的提示的新版本,它总是显示第一个,所以我假设这是因为它已被缓存。

这是我此代码:

$('#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...'; 
           } 
          }, 

可以看出,我在AJAX调用设置cache: false。我也试过在那段代码之前禁用通用缓存$.ajaxSetup({cache: false});,但没有。

任何想法为什么这不起作用?

回答

2

嗯,我不知道这是否是最好的方法(避免qtip缓存会更容易在我看来),但这是我如何解决我的问题,以防有人认为它有用:

  1. 在qtip的文本选项,只留下一个Loading...文本,没有function()

  2. 用“显示”事件加载qtip的内容,掠的div的ID保存内容并将其传递给自定义功能

    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问题,因为我遇到了同样的问题。作者建议在AJAX上设置“cache:false”,但这仍然不适合我。

我确定有一个正确的方法去做。

但是,这里有另一种解决这个问题的方法(可能不是那么有效),即每次你想刷新它的AJAX内容时“销毁”qtip。

我的代码看起来像下面

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的成功属性您必须“返回”内容而不是使用api.set函数

仅供参考:http://qtip2.com/guides#content.ajax.continuous