Javascript 对jquery中的303状态代码做出反应(防止重定向)
当我向某个服务器发送请求时,会出现303响应,然后是请求的响应以及200状态码。 有趣的是,我只在我的开发者控制台的网络视图上看到这个。在检查我的$.ajax()请求的状态代码和响应时,将有第二个请求的响应,以及200 http状态代码 问题是,第二个请求似乎正在被缓存(虽然有200个状态代码),我真的需要它是不可缓存的。 因此,我真的很想干预http 303状态码发生的转发过程。我希望jquery函数检查状态代码,然后发送带有显式头的get请求,告诉服务器不要缓存响应 嗯,我只是不知道怎么做,因为(如上所述)jQuery.ajax方法将用转发请求的响应和状态代码(200)进行响应 你能帮我吗 编辑 10.3.4 303见其他 对请求的响应可以在不同的URI和 应该使用该资源上的GET方法检索。这种方法 存在主要是为了允许后激活脚本的输出 将用户代理重定向到选定的资源。新URI不是一个 将引用替换为最初请求的资源。303 不能缓存响应,但必须缓存对第二个响应的响应 (重定向)请求可能是可缓存的 也许我需要以某种方式阻止用户代理重定向自己,以便我可以执行重定向 或者有没有一种方法可以简单地告诉服务器/浏览器不要缓存来自客户端的第二个请求?或者阻止它重定向我的请求?或者至少在重定向之前修改第二个请求?请参阅Javascript 对jquery中的303状态代码做出反应(防止重定向),javascript,jquery,ajax,caching,http-status-code-303,Javascript,Jquery,Ajax,Caching,Http Status Code 303,当我向某个服务器发送请求时,会出现303响应,然后是请求的响应以及200状态码。 有趣的是,我只在我的开发者控制台的网络视图上看到这个。在检查我的$.ajax()请求的状态代码和响应时,将有第二个请求的响应,以及200 http状态代码 问题是,第二个请求似乎正在被缓存(虽然有200个状态代码),我真的需要它是不可缓存的。 因此,我真的很想干预http 303状态码发生的转发过程。我希望jquery函数检查状态代码,然后发送带有显式头的get请求,告诉服务器不要缓存响应 嗯,我只是不知道怎么做,
.ajax()
调用的属性
例如:
$.ajax({
statusCode: {
303: function() {
alert("page not found");
}
}
});
300范围内的响应是透明的。顺便说一句,web浏览器不会向javascript公开它们中的任何一个。因此,处理303不是一个选项 您是否尝试过在ajaxSetup中将
缓存属性设置为false?它将向请求附加时间戳,防止浏览器缓存响应。您也可以自己手动完成。浏览器应将第一个请求url与您的第二个响应相匹配。不管怎样,听起来这不是你想要的。无论您在浏览器中如何防止缓存原始请求,都应该同样有效地防止缓存重定向的200。这就是说,除了为每个请求使用唯一的URL之外,在浏览器端几乎没有什么可以做的。当您设置cache:false
时,jQuery会自动为您完成此操作
$.ajax({
url: "example.html",
cache: false
}
}).done(function( html ) {
$("#results").append(html);
});
这是一篇老文章,但也许有人会觉得这很有用
我也有同样的问题,在我的例子中,问题在于使用ajax调用的方法。问题出在方法中设置的重定向中。因此,基于此,您不能同时使用ajax和重定向(服务器端),并且我从方法中删除了redirect()
函数,我认为一切都可以正常工作。
顺便说一句,我使用的是codeigniter
,正如我所说:“当检查我的$.ajax()请求的状态码和响应时,将有第二个请求的响应,以及200个http状态码。”。。这种方法也是如此。我用$.ajax({statusCode:{303:function(){alert(303);},200:function(){alert(200);}}});它总是跳转到200方法。有什么解决方案可以获取303响应的数据吗?除了http请求之外,我没有访问服务器的权限。这帮助我理解了为什么IE不将303的响应主体返回给JS(尽管Chrome有)。谢谢