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

时间:2013-05-02 12:09:10

标签: javascript jquery ajax caching http-status-code-303

当我向某个服务器发送请求时,将发出303响应,然后是请求的响应以及200状态代码。 有趣的是,我只在开发人员控制台的网络视图中看到这一点。检查我的$ .ajax()请求的状态代码和响应时,会有第二个请求的响应,以及200个http状态代码。

问题是似乎第二个请求正在被缓存(虽然有200个状态代码),我真的需要它是不可缓存的。 因此,我真的想介入使用http 303状态代码进行的转发过程。我希望我的jquery函数检查状态代码,然后发送带有显式头的get请求,告诉服务器不要缓存响应。

好吧,我只是不知道如何做到这一点,因为(如上所述)jQuery.ajax方法将响应转发请求的响应和状态代码(200)。

你能帮助我吗?

修改

  

10.3.4 303见其他

     

可以在不同的URI下找到对请求的响应   应该使用该资源上的GET方法检索。这种方法   存在主要是为了允许输出POST激活的脚本   将用户代理重定向到选定的资源。新的URI不是   替换最初请求的资源的引用。 303   响应绝不能缓存,而是对第二个的响应   (重定向)请求可能是可缓存的。

也许我需要以某种方式阻止用户代理重定向自己,所以我可以进行重定向?

或者有没有办法简单地告诉服务器/浏览器不要缓存来自客户端的第二个请求?或者阻止它重定向我的请求?或者至少在重定向之前修改第二个请求?

4 个答案:

答案 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");
    }
  }
});