使用参数重新加载页面
Posted
技术标签:
【中文标题】使用参数重新加载页面【英文标题】:Reloading a page with parameters 【发布时间】:2011-09-09 23:29:57 【问题描述】:我有一个页面在每次重新加载时显示随机图片。此页面仅在通过 $_GET 传递数字时显示(表示用户配置文件)。要转到下一张随机图片,我想要一个提交按钮来简单地重新加载页面。但是,我遇到了两个障碍:
在 php 中使用header
函数会产生臭名昭著的“标头已发送”错误。加上用户被重定向,因为没有传递参数。
在 javascript 中,location.reload
确实会重新加载页面,但同样缺少参数会导致相同的结果。
所以我的问题是是否可以在 Javascript 中重新加载带有参数的页面?或者您知道其他解决方案吗?
编辑:使用警告框进行了一些测试,并且 URL 显示在地址栏中。不知道为什么没有传递参数。
【问题讨论】:
【参考方案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>
【讨论】:
以上是关于使用参数重新加载页面的主要内容,如果未能解决你的问题,请参考以下文章