为啥jQuery会阻止propper 301重定向?
Posted
技术标签:
【中文标题】为啥jQuery会阻止propper 301重定向?【英文标题】:Why does jQuery prevent a propper 301 redirect?为什么jQuery会阻止propper 301重定向? 【发布时间】:2019-08-09 14:16:55 【问题描述】:我想在表单发布后使用 html 文件中加载的 jquery 和 jquery 移动库进行 301 重定向。
这在某种程度上无法按预期工作,因为目标发生了变化,但 URL 仍保留在浏览器中,这随后会产生一些问题。
HTML 文件,保存为 UTF-8 unix:
<!DOCTYPE html>
<html lang="DE">
<head>
<title>redirect test</title>
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.2.4/jquery.min.js"></script>
<script src="https://ajax.googleapis.com/ajax/libs/jquerymobile/1.4.5/jquery.mobile.min.js"></script>
</head>
<body>
<form action ="/subapp_search/filter_results_redir.php" method="POST">
<input type="submit">test
</form>
</body>
</html>
PHP动作文件,保存为UTF-8 unix,名称:/dir/filter_results_redir.php
<?php
header("Location: /", TRUE, 301);
exit;
?>
使用此代码,浏览器 URL 窗口将显示 POST URL:dir/filter_results_redir.php
并重定向。
删除两个 jQuery 库中的任何一个都可以解决问题,显示的 URL 将更改为 /
并重定向
我尝试了绝对和相对 URL。服务器是 Apache 2.4.18
Request URL: http://rex.local/subapp_search/filter_results_redir.php
Request Method: POST
Status Code: 301 Moved Permanently
Remote Address: 192.143.56.200:80
Referrer Policy: no-referrer-when-downgrade
Connection: Keep-Alive
Content-Length: 0
Content-Type: text/html; charset=UTF-8
Date: Tue, 19 Mar 2019 05:51:07 GMT
Keep-Alive: timeout=5, max=100
Location: /
Server: Apache/2.4.18 (Ubuntu)
Accept: text/html, */*; q=0.01
Accept-Encoding: gzip, deflate
Accept-Language: de-DE,de;q=0.9,en-US;q=0.8,en;q=0.7
AlexaToolbar-ALX_NS_PH: AlexaToolbar/alx-4.0.3
Cache-Control: no-cache
Connection: keep-alive
Content-Length: 0
Cookie: user_cls=a%3A9%3A%7Bi%3A0%3Bi%3A961992%3Bi%3A1%3Bi%3A961993%3Bi%3A2%3Bi%3A961994%3Bi%3A3%3Bi%3A961995%3Bi%3A4%3Bi%3A961996%3Bi%3A5%3Bi%3A961997%3Bi%3A6%3Bi%3A961998%3Bi%3A7%3Bi%3A962004%3Bi%3A8%3Bi%3A962005%3B%7D; test_cookie=e8e; new_cl=vfn5kj4stc115ri78td0qt8r13; findix_counter=a%3A5%3A%7Bi%3A0%3Bs%3A6%3A%22961944%22%3Bi%3A1%3Bs%3A6%3A%22961960%22%3Bi%3A2%3Bs%3A6%3A%22961940%22%3Bi%3A3%3Bs%3A6%3A%22960238%22%3Bi%3A4%3Bs%3A6%3A%22961952%22%3B%7D; session_localrexDE=4fb1bbbfa7db5a268d50d6a3ca4fef0b
Host: rex.local
Origin: http://rex.local
Pragma: no-cache
Referer: http://rex.local/subapp_search/filter_results_redir.php
User-Agent: Mozilla/5.0 (Macintosh; Intel Mac OS X 10_14_3) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/72.0.3626.121 Safari/537.36
X-Requested-With: XMLHttpRequest
【问题讨论】:
只是猜测,试试看:<form action="*Your redir link*" method="POST" data-ajax="false">
这是一个很好的提示,我也发现了。但是,完全相同的代码行确实有效,而另一行则无效。我不明白。我从另一个页面复制了带有 ajax 信息的表单代码,发现它正在工作,然后我将它添加到我的表单中,但它没有。 30 分钟后,我发现这是完全相同的代码行,但行为不同。
【参考方案1】:
我终于解决了,但我不明白这个问题。同一行代码有效,而另一行无效。
首先要做的是将 data-ajax="false" 添加到代码中。但这并没有解决它。
此代码不起作用:
<form method="post" action="/filter_results_redir.php" data-ajax=”false” >
此代码确实有效:
<form method="post" action="/filter_results_redir.php" data-ajax="false">
看起来完全一样。复制粘贴不行,我一个字一个字地写了一遍,就成功了。
【讨论】:
以上是关于为啥jQuery会阻止propper 301重定向?的主要内容,如果未能解决你的问题,请参考以下文章
阻止 WordPress 从 301 重定向 /index.php 到 /
为啥每次访问 `http://www.iqueen.my` 都会看到 301 重定向?
为啥浏览器会为 http://example.com 缓存 301 重定向并将其用于 http://example.com:8080?