当我将请求发送到特定服务器,303响应会来,然后结合一个200个状态码的请求的响应。 有趣的是,我只看到我的开发者控制台的网络视图中。 当检查的StatusCode和我的$。阿贾克斯()请求的响应,就会有第二个请求的响应,以及一个200 HTTP状态代码。
问题是,它似乎是第二请求被缓存(虽然200状态码),我真的需要它非超高速缓存。 所以我真的想介入到与一个HTTP 303状态码出现的转发过程。 我想我的jQuery函数来检查状态码,然后发送有明确的头,告诉服务器不缓存响应GET请求。
好吧,我只是不知道如何做到这一点,因为(如上所述)的jQuery.ajax方法将与转发的请求的响应和状态码(200)作出反应。
你能帮助我吗?
编辑
10.3.4 303查看其它
到对该请求的响应可在不同的URI中找到,且必须使用该资源一GET方法来提取。 此方法存在主要是为了允许POST激活脚本的输出向用户代理重定向到所选择的资源。 新的URI并不是原始请求资源的替代引用。 303响应必须不被缓存,而是向第二(重定向)请求的响应可能是可缓存的。
也许我需要以某种方式阻止用户代理重定向从他自己,所以我可以做重定向?
或者是有没有办法简单地告诉服务器/浏览器不缓存来自客户端的第二个请求? 或以防止它重定向我的要求? 或至少修改重定向之前第二请求?
在300范围内的响应是为了是透明的。 据我所知,Web浏览器不公开任何人的JavaScript。 因此,处理303是不是一种选择。
您是否尝试过的设置cache
的ajaxSetup属性设置为false? 这将时间戳附加到所述请求,阻止浏览器缓存的响应。 你也可以做到这一点手动自己。 浏览器应该在第一次请求的URL匹配到第二响应
您无法从以下的303重定向阻止浏览器 。 这听起来像那不是你想要什么,反正。 不管你会做在浏览器以防止缓存应该同样有效防止重定向200被缓存的原始请求。 尽管如此,有一点你可以比使用一个唯一的URL为每个请求其他浏览器端做的。 这是为你自动的jQuery当你设置完成cache: false
。
$.ajax({
url: "example.html",
cache: false
}
}).done(function( html ) {
$("#results").append(html);
});
这是旧的文章,但也许有人会觉得这非常有用。
我有同样的问题,在我的情况下,问题是在被称为了使用AJAX的方法。 问题是这是在方法设置的重定向。 所以,在此基础上,你不能同时使用Ajax和重定向(服务器端),和我删除redirect()
函数的方法,按预期工作我的一切。 顺便说一句,我使用codeigniter
。
见statusCode
您的财产.ajax()
调用
例如:
$.ajax({
statusCode: {
303: function() {
alert("page not found");
}
}
});