我正在使用jQuery来动态地添加一个脚本到我的页面,它的工作原理,但是jQuery在URL上添加了“_ = TIMESTAMP”,导致浏览器从不使用缓存.使用以下代码:
<!DOCTYPE html PUBLIC '-//W3C//DTD XHTML 1.0 Transitional//EN' 'http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd'> <html xmlns='http://www.w3.org/1999/xhtml'> <head> <script src="http://ajax.googleapis.com/ajax/libs/jquery/1.5/jquery.min.js"></script> </head> <body> <script type="text/javascript"> $("head").append('<script src="https://ajax.googleapis.com/ajax/libs/jqueryui/1.8.15/jquery-ui.min.js"></scr' + 'ipt>'); </script> </body> </html>
我可以在firebug中看到请求的URL是:
https://ajax.googleapis.com/ajax/libs/jqueryui/1.8.15/jquery-ui.min.js?_=1313291978667
有没有人知道如何告诉jQuery不这样做?
谢谢
解决方法
为了回答您的原始问题,您会看到附加的时间戳,因为jQuery
by default为脚本和jsonp调用设置cache:false,并将时间戳追加到URL.
为避免时间戳,您可以这样做:
$.ajaxPrefilter(function( options,originalOptions,jqXHR ) { if ( options.dataType == 'script' || originalOptions.dataType == 'script' ) { options.cache = true; } });
这为所有$.ajax调用设置了一个全局prefilter,包括在请求脚本时由jQuery所做的调用.
我们检查dataType,以确保我们不会无意中定位其他ajax调用,并将缓存显式设置为true.这将避免时间戳附加问题.
您现在可以使用原始代码,它将从缓存中取出.