2011-06-07 121 views
1

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

  • 在PHP中使用header函数产生臭名昭着的“头已发送”错误。此外,由于没有参数传递,用户将被重定向。
  • 在Javascript中,location.reload会重新加载页面,但同样缺少该参数会导致相同的结果。

所以我的问题是,是否有可能在JavaScript中重新加载页面的参数?或者你知道另一种解决方案吗?

编辑:一些测试与一个警告框和URL显示,因为它出现在地址栏中。不知道为什么参数没有被传递。

回答

2

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

+0

正如以下@Berry Langerak的回答所解释的那样,有一些'require_once'行会难以移动到别处。我已经尝试过在开始时使用'header',但迄今为止没有成功。 – 2011-06-07 11:47:14

1

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

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

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

然后通过它?我认为这应该起作用?

window.location(window.location.toString()); 
+0

刚刚用'toString'作为变体进行了测试。结果是一样的,就好像参数没有被传递一样。接近页面顶部的检查是这样的:'isset($ _ GET ['param'])&& intval($ _ GET ['param'])> 0'。至于标题错误,这很可能是由于几个'require_once'行在最接近的顶部执行,比如初始化用户和数据库连接。 – 2011-06-07 11:19:49

2

在另一个话题,我发现

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

将保持参数。

1

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

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

好吧,我可能也因为它是一个痛苦得到的东西的工作,通过JavaScript和PHP和我没有足够的时间去在阿贾克斯工作的东西张贴此。一个简单的解决方法是简单地在表单的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>