在jquery中对303状态代码做出反应(防止重定向)

当我向某个服务器发送请求时,将发出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不是一种选择。

您是否尝试在ajaxSetup中将cache属性设置为false? 它会在请求中附加时间戳,防止浏览器缓存响应。 您也可以自己手动完成。 浏览器应该将第一个请求URL与第二个响应匹配

您无法阻止浏览器执行303重定向 。 听起来这不是你想要的,无论如何。 无论您在浏览器中做什么以防止原始请求被缓存,都应该同样有效地防止重定向200被缓存。 也就是说,除了为每个请求使用唯一的URL之外,您在浏览器端几乎无法做到。 设置cache: false时,jQuery会自动为您完成此操作。

 $.ajax({ url: "example.html", cache: false } }).done(function( html ) { $("#results").append(html); }); 

这是旧post,但也许有人会觉得这很有用。

我有同样的问题,在我的情况下,问题出在使用ajax调用的方法中。 问题出在方法中设置的重定向中。 因此,基于此,您不能同时使用ajax和重定向(服务器端),并且我从方法中删除了redirect()函数,我的一切都按预期工作。 顺便说一下,我正在使用codeigniter

请参阅.ajax()调用的statusCode属性

示例:

 $.ajax({ statusCode: { 303: function() { alert("page not found"); } } });