【问题标题】:Does datatables cache results for an ajaxSource?数据表是否缓存 ajaxSource 的结果?
【发布时间】:2015-05-06 05:34:51
【问题描述】:

我在 portlet war 文件中嵌入了 jquery 数据表,并且遇到了一些我需要解释的有趣行为。

这就是我的 javascript 的样子...http://pastebin.com/qXpwt9A7

这是场景。

  1. 我打开网页并在“TextA”上进行关键字搜索 结果:向服务器发送ajax请求以加载jquery数据表。

  2. 在不关闭浏览器的情况下,我在“TextB”上进行关键字搜索。 结果:向服务器发送ajax请求以加载jquery数据表。

  3. 在不关闭浏览器的情况下,我再次对“TextA”进行关键字搜索。 结果:请求未发送到服务器。但是我的数据表足够聪明,可以记住在第 1 步中检索到的结果,并将结果显示在页面上。

这实际上对我很有效,但我不知道为什么会这样。

如果我不得不猜测,我认为数据表中必须有一些智能,它会缓存参数相同的 ajax 源的结果,这样它就不必触发对该 ajax 源的请求再次。

我说的对吗? 我正在使用数据表 1.9.4。

【问题讨论】:

    标签: datatables jquery-datatables


    【解决方案1】:

    默认情况下,DataTables v.1.9.4 禁止在 fnServerData 函数中缓存请求,请注意以下 DataTables 源代码摘录中的 "cache": false

      "fnServerData": function ( sUrl, aoData, fnCallback, oSettings ) {
         oSettings.jqXHR = $.ajax( {
            "url":  sUrl,
            "data": aoData,
            "success": function (json) {
               if ( json.sError ) {
                  oSettings.oApi._fnLog( oSettings, 0, json.sError );
               }
    
               $(oSettings.oInstance).trigger('xhr', [oSettings, json]);
               fnCallback( json );
            },
            "dataType": "json",
            "cache": false,
            "type": oSettings.sServerMethod,
            "error": function (xhr, error, thrown) {
               if ( error == "parsererror" ) {
                  oSettings.oApi._fnLog( oSettings, 0, "DataTables warning: JSON data from "+
                     "server could not be parsed. This is caused by a JSON formatting error." );
               }
            }
         } );
      }
    

    但是,在您的代码中,您将覆盖 fnServerData 并使用 $.getJSON(),这是 $.ajax() 的简写函数,但未指定 cache 选项。 cache 选项的默认值是 true,这就是您的请求被缓存的原因。

    以下是 jQuery 手册的摘录:

    cache(默认:truefalsedataType'script''jsonp'

    类型:布尔值

    如果设置为false,它将强制请求的页面不被 被浏览器缓存。注意:将cache 设置为false 只会起作用 正确使用 HEAD 和 GET 请求。它通过附加来工作 "_={timestamp}" 到 GET 参数。该参数不需要 其他类型的请求,IE8 中对 URL 进行 POST 时除外 已被 GET 请求。

    【讨论】:

    • 非常感谢。这是一个绝妙的答案。正如我已经提到的,我实际上很高兴缓存具有相同参数的请求,但是我只需要解释为什么会发生这种情况。
    猜你喜欢
    • 2017-11-14
    • 2011-04-23
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多