【问题标题】:Reloading a page with parameters使用参数重新加载页面
【发布时间】:2011-09-09 23:29:57
【问题描述】:

我有一个页面在每次重新加载时显示随机图片。此页面仅在通过 $_GET 传递数字时显示(表示用户配置文件)。要转到下一张随机图片,我想要一个提交按钮来简单地重新加载页面。但是,我遇到了两个障碍:

  • 在 PHP 中使用 header 函数会产生臭名昭著的“标头已发送”错误。加上用户被重定向,因为没有传递参数。
  • 在 Javascript 中,location.reload 确实会重新加载页面,但同样缺少参数会导致相同的结果。

所以我的问题是是否可以在 Javascript 中重新加载带有参数的页面?或者您知道其他解决方案吗?

编辑:使用警告框进行了一些测试,并且 URL 显示在地址栏中。不知道为什么没有传递参数。

【问题讨论】:

    标签: php javascript page-refresh


    【解决方案1】:

    您应该想知道为什么会收到headers already sent 错误。这通常是因为您的流程不正确。确保在生成输出之前处理您的 PHP。在代码顶部检查提交的表单 - 并在不执行任何其他操作的情况下安全地重定向。应该能解决你的问题。

    【讨论】:

    • 正如下面@Berry Langerak 的回答所解释的,有几条require_once 行很难移到其他地方。我一开始就尝试使用header,但到目前为止没有成功。
    【解决方案2】:

    在另一个话题中我发现

    window.location.replace(window.location.href)

    将保留参数。

    【讨论】:

      【解决方案3】:

      在 PHP 中使用 header 函数会产生臭名昭著的“headers already sent by”错误。

      这很简单:将执行 header() 调用的代码移到顶部(在任何其他输出之前)。 “标头已发送”是臭名昭著的,但也非常容易解决。

      在 Javascript 中,location.reload 确实会重新加载页面,但同样缺少参数会导致相同的结果。

      然后传下去?我认为这应该可行?

      window.location( window.location.toString( ) );
      

      【讨论】:

      • 刚刚用“toString”作为变体再次测试了这个。结果是一样的,就好像参数没有被传递一样。页面顶部附近的检查是这样的:isset($_GET['param']) && intval($_GET['param']) > 0。至于标题错误,这很可能是由靠近顶部的几行 require_once 引起的,它们执行诸如初始化用户和数据库连接之类的操作。
      【解决方案4】:

      您可以使用document.location 代替location.reload 将页面重定向到具有通过GET 传递的参数的同一页面。例如,

      <?php
          $id = $_GET['user_id'];
          echo "<script type='text/js'>
                document.location='".$_SERVER['PHP_SELF']."&id=".$id."';
                </script>";
      ?>
      

      【讨论】:

        【解决方案5】:

        好的,我不妨发布这个,因为通过 javascript 和 PHP 工作很痛苦,而且我没有足够的时间让 ajax 工作。一个简单的解决方法是简单地在表单的 action 属性中指定参数(特殊标记来自 smarty)。

           <form Method="POST" ACTION="my_page.php?param={$smarty.get.i}">
                  <!-- PHP: If ( isset($_POST['next']) ) do SQL ... -->
                  <input type="submit" name="like" value="I like">
                  <input type="submit" name="next" value="Next" >
           </form>
        

        【讨论】:

          猜你喜欢
          • 2014-06-16
          • 1970-01-01
          • 2010-09-22
          • 1970-01-01
          • 2013-07-07
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          相关资源
          最近更新 更多