当我向某个服务器发送请求时,将发出303响应,然后是请求的响应以及200状态代码。
有趣的是,我只在开发人员控制台的网络视图中看到了这一点。检查我的$ .ajax()请求的状态代码和响应时,将会有第二个请求的响应,以及200个http状态代码。
问题是似乎第二个请求被缓存(虽然200状态代码),我真的需要它是不可缓存的。
因此,我真的想介入使用http 303状态代码进行的转发过程。我希望我的jquery函数检查状态代码,然后发送带有显式头的get请求,告诉服务器不要缓存响应。
好吧,我只是不知道如何做到这一点,因为(如上所述)jQuery.ajax方法将响应转发请求的响应和状态代码(200)。
你可以帮我吗?
编辑
10.3.4 303见其他
可以在不同的URI下找到对请求的响应
应该使用该资源上的GET方法检索。这种方法
存在主要是为了允许输出POST激活的脚本
将用户代理重定向到选定的资源。新的URI不是
替换最初请求的资源的引用。 303
响应绝不能缓存,而是对第二个的响应
(重定向)请求可能是可缓存的。
也许我需要以某种方式阻止用户代理重定向自己,所以我可以做重定向?
或者有没有办法简单地告诉服务器/浏览器不要缓存来自客户端的第二个请求?或者阻止它重定向我的请求?或者至少在重定向之前修改第二个请求?
300范围内的回应是透明的。 AFAIK,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");
}
}
});