请教一个jquery 中getjson问题

Helloall 发布于 2014/08/05 20:08
阅读 367
收藏 0
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 (后面红字部分是自动生成的吗? )


加载中
0
tsl0922
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,会添加时间戳防止缓存。

tsl0922
tsl0922
回复 @_Obama : $.getJSON 没法指定 cache 参数,调用 $.ajax并设置 dataType 为 jsonp 就是 getJSON,这时就可以设置 cache 参数了。
tsl0922
tsl0922
回复 @_Obama : 应该是 true,我修改了回复内容
Helloall
Helloall
请问在那里将cache设置为false
0
红星xx
红星xx
不会自动生成
Helloall
Helloall
那既然如此,为什么后面会出现这一串不明字符??
0
metian
metian

是jquery自动加的。

0
Helloall
Helloall

引用来自“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,会添加时间戳防止缓存。

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

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

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

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

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