【问题标题】:Redirect AJAX response URL from PHP header从 PHP 标头重定向 AJAX 响应 URL
【发布时间】:2021-09-08 22:13:19
【问题描述】:

我有一个 AJAX POST,它从我的 PHP 文件 newPNRsubmit.php 发送回一个成功的响应:

if(isset($_POST['ticketentry'])){
            $_SESSION['ticketEntry'] = 1;
            header("location: pnr-details?id=".$pnrid);
        }

但是我想使用我收到的 AJAX 响应到 window.location

这是回复:

XHR finished loading: GET "https://example.com/pnr-details?id=240".

这是我的 AJAX 结构:

$.ajax({
 type: "POST",
 url: "newPNRsubmit.php",
 data: {
 bookingdate: bookingdate,
 airline_id: airline_id
},
 cache: false,
 success: function(data, url) {
 $('#NewPNRModal').modal( 'hide' );
},
 error: function(xhr, status, error) {
 console.error(xhr);
 }
 });
 return false;

如何正确地将收到的 URL 解析为 window.location

更新:这是来自控制台选项卡的响应。第二个GET XHR 显示了我需要window.location 的链接。我应该更新标头位置以在我的PHP 文件中发送JSON 数据以使其正常工作吗?

【问题讨论】:

    标签: php jquery ajax redirect


    【解决方案1】:

    要么在正文中返回 URL 而不是标头,要么像这样获取标头:

    success: function(data, URL, jqXHR) {
      window.location.href = jqXHR.getResponseHeader("location");
    }
    

    【讨论】:

    • 我也在考虑这个解决方案,但我想知道浏览器是否不会简单地跟随location 标头而我们不会看到它。好吧,似乎只有在你的CORS中添加Access-Control-Expose-Headers: Location才能阅读它,根据这篇文章:stackoverflow.com/a/15444439/653182
    • @htmhell 我做到了,但它现在重定向到一个 NULL url
    • 您是从同一个域发送请求吗?如果不是,则可能是 CORS 问题。无论如何,请尝试console.log(jqXHR.getAllResponseHeaders()); 看看结果如何。
    • 你在控制台看到的输出是什么?
    • @HTMHell 这是输出:cache-control: no-store, no-cache, must-revalidate content-encoding: br content-type: text/html; charset=UTF-8 date: Fri, 25 Jun 2021 14:25:10 GMT expires: Thu, 19 Nov 1981 08:52:00 GMT pragma: no-cache server: LiteSpeed vary: Accept-Encoding x-powered-by: PHP/7.2.34 x-turbo-charged-by: LiteSpeed
    猜你喜欢
    • 2018-11-23
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多