datatables是否缓存ajaxSource的结果?
我在portlet war文件中嵌入了jquery数据表,并且遇到了一些有趣的行为,我需要对此进行一些解释 这就是我的javascript看起来的样子 下面是一个场景datatables是否缓存ajaxSource的结果?,datatables,jquery-datatables,Datatables,Jquery Datatables,我在portlet war文件中嵌入了jquery数据表,并且遇到了一些有趣的行为,我需要对此进行一些解释 这就是我的javascript看起来的样子 下面是一个场景 我打开网页,在“TextA”上搜索关键词 结果:向服务器发送一个ajax请求以加载jquery数据表 在不关闭浏览器的情况下,我对“TextB”进行关键字搜索。 结果:向服务器发送一个ajax请求以加载jquery数据表 在不关闭浏览器的情况下,我再次对“TextA”进行关键字搜索。 结果:请求未发送到服务器。但是我的datata
我使用的是数据表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请求了
非常感谢你。这是一个极好的答案。正如我已经提到的,我实际上很高兴缓存具有相同参数的请求,但是我只需要解释一下为什么会发生这种情况。