当我向某个服务器发送请求时,将发出303响应,然后是请求的响应以及200状态代码。 有趣的是,我只在开发人员控制台的网络视图中看到这一点。检查我的$ .ajax()请求的状态代码和响应时,会有第二个请求的响应,以及200个http状态代码。
问题是似乎第二个请求正在被缓存(虽然有200个状态代码),我真的需要它是不可缓存的。 因此,我真的想介入使用http 303状态代码进行的转发过程。我希望我的jquery函数检查状态代码,然后发送带有显式头的get请求,告诉服务器不要缓存响应。
好吧,我只是不知道如何做到这一点,因为(如上所述)jQuery.ajax方法将响应转发请求的响应和状态代码(200)。
你能帮助我吗?
修改
10.3.4 303见其他
可以在不同的URI下找到对请求的响应 应该使用该资源上的GET方法检索。这种方法 存在主要是为了允许输出POST激活的脚本 将用户代理重定向到选定的资源。新的URI不是 替换最初请求的资源的引用。 303 响应绝不能缓存,而是对第二个的响应 (重定向)请求可能是可缓存的。
也许我需要以某种方式阻止用户代理重定向自己,所以我可以进行重定向?
或者有没有办法简单地告诉服务器/浏览器不要缓存来自客户端的第二个请求?或者阻止它重定向我的请求?或者至少在重定向之前修改第二个请求?
答案 0 :(得分:9)
300范围内的回应是透明的。 AFAIK,Web浏览器不会将它们中的任何一个暴露给javascript。因此,处理303不是一种选择。
您是否尝试在ajaxSetup中将cache
属性设置为false?它会在请求中附加时间戳,防止浏览器缓存响应。您也可以自己手动执行此操作。浏览器应该将第一个请求URL与第二个响应匹配
答案 1 :(得分:2)
你cannot stop the browser from following the 303 redirect。听起来这不是你想要的,无论如何。无论您在浏览器中做什么以防止原始请求被缓存,都应该同样有效地防止重定向200被缓存。也就是说,除了为每个请求使用唯一的URL之外,您在浏览器端几乎无法做到。设置cache: false
时,jQuery会自动为您完成此操作。
$.ajax({
url: "example.html",
cache: false
}
}).done(function( html ) {
$("#results").append(html);
});
答案 2 :(得分:0)
这是旧帖子,但也许有人会觉得这很有用。
我有同样的问题,在我的情况下,问题出在使用ajax调用的方法中。问题出在方法中设置的重定向中。因此,基于此,您不能同时使用ajax和重定向(服务器端),并且我从方法中删除了redirect()
函数,我的一切都按预期工作。
顺便说一句,我正在使用codeigniter
。
答案 3 :(得分:-1)
查看.ajax()
来电的statusCode
属性
示例:
$.ajax({
statusCode: {
303: function() {
alert("page not found");
}
}
});