6
回答
请教一个jquery 中getjson问题
利用AWS快速构建适用于生产的无服务器应用程序,免费试用12个月>>>   
function list(_path,record) {
    $.getJSON(getFileUrl('lt', _path), function(data) { //这里传入 / 根目录给getfileurl函数
        dirs = data.dirs;
        files = data.files;
        if(!record) {
            if(path != data.path) {
                listhistory.push(path);
            }
        }
        path = data.path;
        updatePath();
        updateList();
    });
}
------------------------------------------------------------------
//getfileurl接收2个参数 lt 和 / 根目录 ,file是空的 
function getFileUrl(type, _path, file) {

	if(file) {
		file = '&file='+encodeURIComponent(file);
	} else {
		file = '';

	}
	return 'index.php?action='+type+'&path='+encodeURIComponent(_path)+file;

}

按理来说, 该函数应该返回 index.php?action=lt&path=%2F

但是我在浏览器调试工具中看到它在后面自动产生了一个随机数,是用于解决浏览器缓存问题的。但是我在代码中找不到任何一句能够产生该随机数的代码块。请问是不是getjson会自动添加随机数解决浏览器缓存问题?

http://localhost:63342/proj/index.php?action=lt&path=%2F&_=1407240310747 (后面红字部分是自动生成的吗? )


举报
Helloall
发帖于3年前 6回/361阅
共有6个答案 最后回答: 3年前

可能是 jQuery 自动添加的,$.getJSON 只是 $.ajax 的一个简单封装而已。

使用 $.ajax, 指定 dataType 为 jsonp,cache 为 true 试试看还会不会生成?

UPDATE:

根据 jQuery ajax 文档

cache Boolean (默认: true,dataType为script和jsonp时默认为false) jQuery 1.2 新功能,设置为 false 将不缓存此页面。

JSONP 请求默认 cache 为 false,会添加时间戳防止缓存。

--- 共有 3 条评论 ---
tsl0922回复 @_Obama : $.getJSON 没法指定 cache 参数,调用 $.ajax并设置 dataType 为 jsonp 就是 getJSON,这时就可以设置 cache 参数了。 3年前 回复
tsl0922回复 @_Obama : 应该是 true,我修改了回复内容 3年前 回复
Helloall请问在那里将cache设置为false 3年前 回复

引用来自“tsl0922”的评论

可能是 jQuery 自动添加的,$.getJSON 只是 $.ajax 的一个简单封装而已。

使用 $.ajax, 指定 dataType 为 jsonp,cache 为 true 试试看还会不会生成?

UPDATE:

根据 jQuery ajax 文档

cache Boolean (默认: true,dataType为script和jsonp时默认为false) jQuery 1.2 新功能,设置为 false 将不缓存此页面。

JSONP 请求默认 cache 为 false,会添加时间戳防止缓存。

大师,这么说这是自动加上去的。。
--- 共有 2 条评论 ---
Helloall回复 @tsl0922 : 原来是这样的啊,但是我还有一个小疑问,为什么直接在浏览器中输入 index.php?action=lt&path=%2f的时候,页面却显示不正常,好像显示一大堆 json 3年前 回复
tsl0922是的 3年前 回复

抱歉,可能记错了。又仔细查了下 jQuery 的文档和源码,$.getJSON 等价于:

$.ajax({
  dataType: "json",
  url: url,
  data: data,
  success: success
});

但是按文档来看,只有 dataType 为 jsonp 和 script 的时候 cache 才默认为 false。所以,这个时间戳应该不是 jQuery 自动加的,是不是楼主在哪里对 jQuery 做了全局设置 cache 为 false?

--- 共有 2 条评论 ---
tsl0922回复 @_Obama : 那就很奇怪了,不知道是不是跟 jQuery 的版本有关。 3年前 回复
Helloall我可以肯定地说,绝对没有。 3年前 回复
跟jquery没有一毛钱关系,我用这函数从来没出现过,肯定的告诉你,你这个参数肯定是js哪里设置了全局参数加上去的
顶部