Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/http/4.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
datatables是否缓存ajaxSource的结果?_Datatables_Jquery Datatables - Fatal编程技术网

datatables是否缓存ajaxSource的结果?

datatables是否缓存ajaxSource的结果?,datatables,jquery-datatables,Datatables,Jquery Datatables,我在portlet war文件中嵌入了jquery数据表,并且遇到了一些有趣的行为,我需要对此进行一些解释 这就是我的javascript看起来的样子 下面是一个场景 我打开网页,在“TextA”上搜索关键词 结果:向服务器发送一个ajax请求以加载jquery数据表 在不关闭浏览器的情况下,我对“TextB”进行关键字搜索。 结果:向服务器发送一个ajax请求以加载jquery数据表 在不关闭浏览器的情况下,我再次对“TextA”进行关键字搜索。 结果:请求未发送到服务器。但是我的datata

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

这就是我的javascript看起来的样子

下面是一个场景

  • 我打开网页,在“TextA”上搜索关键词 结果:向服务器发送一个ajax请求以加载jquery数据表

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

  • 在不关闭浏览器的情况下,我再次对“TextA”进行关键字搜索。 结果:请求未发送到服务器。但是我的datatable足够智能,可以记住步骤1中检索到的结果,并在页面上显示结果

  • 这对我来说确实很有效,但我不知道为什么会这样

    如果我不得不猜测的话,我认为datatables中一定有一些智能,它缓存ajax源的结果,参数相同,这样就不必再次发出对ajax源的请求

    我说得对吗?
    我使用的是数据表1.9.4。

    默认情况下,DataTables v.1.9.4在
    fnServerData
    函数中阻止请求缓存,注意
    “缓存”:下面的DataTables源代码摘录中的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()
    ,这是一个不指定
    缓存
    选项的简写函数。
    cache
    选项的默认值为
    true
    ,这就是缓存请求的原因

    以下是jQuery手册的摘录:

    缓存
    (对于
    数据类型
    'jsonp'
    ,默认值为
    true
    false

    类型:布尔型

    如果设置为
    false
    ,则将强制不显示请求的页面 由浏览器缓存。注意:将
    cache
    设置为
    false
    仅起作用 正确使用HEAD并获取请求。它通过附加 “{timestamp}”以获取参数。此参数不需要用于 其他类型的请求,IE8中发布URL时除外 这已经被一个GET请求了


    非常感谢你。这是一个极好的答案。正如我已经提到的,我实际上很高兴缓存具有相同参数的请求,但是我只需要解释一下为什么会发生这种情况。