当前位置: 首页 > 知识库问答 >
问题:

当AJAX请求得到“302移动”响应时会发生什么?

林修真
2023-03-14

我正在尝试在不修改后端的情况下对旧网站表单进行AJAXify。最初,后端会在收到表单后用“302移动”重定向到“谢谢”页面进行响应。

现在,当我尝试使用jQuery$提交表单时。ajax调用时,表单数据被成功提交,但“302 Moved”重定向似乎被浏览器取消,jQuery不知道发生了什么。

我的问题是,不管发生什么,美元。ajax调用返回一个错误,状态为0,因此我无法区分成功提交和错误。

有没有办法阻止浏览器尝试遵循重定向,或者至少返回正确的响应代码?(我用的是Chrome。)

共有3个答案

常心水
2023-03-14

您的后端应用程序可能具有相对重定向,而jquery ajax可能无法处理该重定向。在这种情况下,位置头将不包括域名,只包括相对路径。对一些人来说(我不清楚)它可能导致同源政策问题的原因。有趣的是,将重定向更改为绝对路径应该可以解决这个问题。在jQuery 1.11.1上测试。

理论上的ajax调用:

$.ajax({
    'url': '/your-url',
    'method': 'post',
    'data': form.serialize()
}).done(function(data) {
    // something
}).fail(function(jqXHR, textStatus, errorThrown) {
    // another something
});

所以在 /your-url控制器中,你可能有类似的东西:

return $this->response->redirect('//same.domain/path');

return $this->response->redirect('/path');

第一个可以。第二个不是。

关键是您可能需要改变后端,但只需要一点点。如果您真的不想和/或以不同的方式处理它,您不需要检查请求是否是XmlHttpRequest。

封锐藻
2023-03-14

这能帮你找到正确的方向吗?

$.ajax({
    type: "GET",
    url: url,
    data: data,
    complete: function(e, xhr, settings){
       if(e.status === 200){
            console.log(e.responseText);
       }else{
            console.log("error");
       }
   }
   });
公羊浩气
2023-03-14

我认为不,你不能不改变后端。你必须改变响应头,让Ajax知道/理解该做什么。如果你做了重定向,你必须改变头,因为Ajax调用响应不会这样做。

 类似资料:
  • 问题内容: 我在wp主题中设置了基本的wordpress ajax示例。触发是由modernizr.js检查页面上的媒体查询来完成的。 我已经本地化了脚本并使其入队。 最后处理请求的函数是: 这总是使我的响应为0(无属性),我也不知道为什么。PS这都是本地的。 问题答案: 一切都必须在这里匹配: PHP JS

  • 请求: 主机:Tempuri.org用户代理:Mozilla/5.0(Windows NT 6.1;WOW64;RV:37.0)Gecko/20100101 Firefox/37.0接受:text/html,application/xhtml+xml,application/xml;q=0.9,/;q=0.8接受-语言:en-US,en;q=0.5接受-编码:gzip,deflate来源:http

  • 当您以“正常”方式停止或重新启动tomcat时,正在处理的http请求会发生什么情况?它们将被处理直到响应完成还是http线程被中断?有没有办法配置优雅的停车?

  • 问题内容: 08 nov 608 nov 5 08 nov 4 08 nov 308 nov 1 08 nov 2 为什么我得到: HTTP request Response Assertion:Test failed:text expected to contain /302/” error in “Assertion Results” 问题答案: 这是因为您没有在断言中检入正确的“要测试的字段

  • 问题内容: 我正在创建Web应用程序的功能,用户可以在其中“编辑”记录并使用jQuery通过AJAX提交表单。 当某人正在“ ajax编辑”一条记录并且他们使用有效数据提交表单时,我发送200状态代码,该状态代码触发jQuery AJAX Success函数,然后忽略响应正文(因为它成功了,所以我不需要它),然后折叠表格。 当存在表单验证错误时,我将发送400状态代码以触发jQuery错误方法,并

  • 我的Ajax调用没有执行web方法,正在返回状态代码“302找到”。检查跟踪表明,该方法实际上是作为“选项”发送的?? 当web方法在aspx文件中时,这一切都在工作。当我把代码转换成UserControl时,我不得不把它移动到asmx。 Ajax调用: PLService中的Web方法 请求: 主持人:坦普里。org用户代理:Mozilla/5.0(Windows NT 6.1;WOW64;rv