Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/441.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 对jquery中的303状态代码做出反应(防止重定向)_Javascript_Jquery_Ajax_Caching_Http Status Code 303 - Fatal编程技术网

Javascript 对jquery中的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请求,告诉服务器不要缓存响应 嗯,我只是不知道怎么做,

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

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

嗯,我只是不知道怎么做,因为(如上所述)jQuery.ajax方法将用转发请求的响应和状态代码(200)进行响应

你能帮我吗

编辑

10.3.4 303见其他

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

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

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

请参阅
.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有)。谢谢