【问题标题】:redirect with php not working用php重定向不起作用
【发布时间】:2016-04-14 00:00:52
【问题描述】:

我有一个文件,当被调用时,它应该重定向到另一个位置。 为了确保在标头之前没有发送任何内容,我调用了一个文件,其唯一内容是标头。我也尝试使用其他方法重定向,但似乎没有任何效果。代码如下:

首先有一个 ajax 调用(成功)将一些数据发送到 file1.php

$.ajax({
      url: "file1.php",
      type: "POST",
      data: {id:10},
      success: function(){
      },
      error: function (){
      }
}); 

file1.php 获取数据并调用bridge.php

<?
if (isset($_POST['id'])) {
        $selected_id      = $_POST['id'];
}
 require('./code/bridge.php');
?>

文件bridge.php 应该重定向到新的url。我尝试了以下(不是同时) 1.

<script>location.href='https://www.google.al/?gws_rd=cr,ssl&ei=l82QVqyAHIb6O5bJs6gK'</script>

2.

<?
 echo '<META HTTP-EQUIV="Refresh" Content="0; URL= https://www.google.al/?gws_rd=cr,ssl&ei=l82QVqyAHIb6O5bJs6gK">'; 
?>

3.

<?
  header("location: /edit_document"); 
?>

4.

<?
  ob_start();
  header("location: /edit_document");
?>

我正在使用 firebug 来查看响应。它给出状态 200(请求已完成)。 POST 给出了我发送的正确参数。响应给出了我试图重定向的页面。但不会发生重定向。

我将代码缩减到这一点,以消除所有可能导致问题的东西。我知道您可能想知道为什么我要编写一个似乎什么都不做的代码。但如果它不能像这样工作,我怀疑我是否可以通过许多其他电话来解决问题。另外,我打算使用标头进行重定向,但出于绝望尝试了其他选项。

【问题讨论】:

  • 放exit();就在 header("location: /edit_document"); 之后

标签: php ajax redirect http-headers


【解决方案1】:

尝试通过AJAX请求获取重定向URL,然后用它进行重定向:

$.ajax({
  url: "file1.php",
  type: "POST",
  data: {id:10},
  success: function(url){
    window.location.href = url;
  },
  error: function (){
  }
}); 

bridge.php:

<?php
print "https://www.google.al/?gws_rd=cr,ssl&ei=l82QVqyAHIb6O5bJs6gK";
?>

【讨论】:

  • 我想过。唯一的问题是,如果我这样做,发送的 id 将在重定向期间丢失。我需要这个页面(file1.php)来获取它。
  • @amygrimaldi file1.php 正在获取该 ID,然后可以根据该 ID 返回 URL 以进行重定向。
【解决方案2】:

使用 Javascript 或 Jquery 重定向... // 类似 HTTP 重定向的行为 window.location.replace("http://stackoverflow.com");

// 类似于点击链接的行为 window.location.href = "http://stackoverflow.com";

【讨论】:

    【解决方案3】:

    人们希望使用AJAX 以便在提交表单时页面不会重定向。奇怪的是你想要相反但使用AJAX。为什么不创建一个像这样的简单表单并在需要重定向时提交表单。

    <form name="myForm" action="file1.php" method="post">
      <input type="hidden" name="id" value="10" />
    </form>
    

    只需用这个替换你的 ajax ($.ajax({...});) 代码。

    document.myForm.submit();
    

    如果您的表单有id="myForm" 而不是name="myForm",这将提供相同的结果:

    document.getElementById("myForm").submit();
    

    如果你想从js中动态修改id,可以这样(把代码放在submit()之前):

    document.myForm.id.value = 20;
    

    【讨论】:

    • 在我试图完成的这个特定任务中,不能选择使用表单。我在同一个项目中使用了表单来处理其他事情。但是这里的数据是从一个表中获取的。
    • 查看我答案的底部,您可以从表格中获取数据并设置为输入,并且您可以在输入字段隐藏时保持表单隐藏,它不会作为页面中的表格。
    猜你喜欢
    • 2016-01-12
    • 2017-03-06
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-09-29
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多