数据表是否缓存 ajaxSource 的结果?

Does datatables cache results for an ajaxSource?

我已经在 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 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() 的 shorthand 函数,而没有指定 cache 选项。 cache 选项的默认值为 true,这就是缓存您的请求的原因。

以下是 jQuery 手册的节选:

cache (default: true, false for dataType 'script' and 'jsonp')

Type: Boolean

If set to false, it will force requested pages not to be cached by the browser. Note: Setting cache to false will only work correctly with HEAD and GET requests. It works by appending "_={timestamp}" to the GET parameters. The parameter is not needed for other types of requests, except in IE8 when a POST is made to a URL that has already been requested by a GET.