我有一个iframe执行一些服务器端工作并显示图像。我们使用iframe来动态显示图像。用户点击上传图片,我们会显示微调器,然后使用新图片重新加载iframe。我的目标是避免在用户通过“后退”按钮进入页面时显示的确认表单重新提交页面。
本质上,作为iframe的src的页面是一个php文件,它检查三个条件:
1)名为redirect
的变量是否设置?如果是这样,'urldecode()',并将其用作img src。
2)文件上传了吗?如果是这样,将其保存到数据库,并将图像路径重定向到此页面作为GET变量
header('Location : mypage?redirect=path%2Fto%2Fimg.jpg');
die('upload');
3)什么都没上传?抓取我们从db获取的内容,然后将路径重定向到此页面作为GET变量
header('Location : mypage?redirect=path%2Fto%2Fimg.jpg');
die('default');
我们在父页面中的内容是
<iframe id='myframe' src='mypage.php'>
问题是,我们永远不会得到重定向。该页面确实已经消失,因此我们会在upload
调用中看到一个带有default
或die()
字符串的白色方块,而不是个人资料图片。
在iframe中使用header()
时,它的行为是否正常?我希望它重定向iframe的内容。
感谢您的时间。
答案 0 :(得分:4)
我刚刚在我的测试环境中复制了这个。您的标头不正确,Location
和:
<强>作品强>
header('Location: mypage?redirect=path%2Fto%2Fimg.jpg');
die('default');
不起作用
header('Location : mypage?redirect=path%2Fto%2Fimg.jpg');
die('default');
答案 1 :(得分:2)
避免表单重新提交的最佳方法是在提交后使用重定向。而不是在POST后直接处理数据,您应该重定向用户浏览器。请查看此文档以获取更多信息:
http://en.wikipedia.org/wiki/Post/Redirect/Get
您还可能遇到特定浏览器和/或缓存的问题。尝试添加这些标头以避免缓存问题:
header(“Cache-Control:no-cache,must-revalidate”); // HTTP / 1.1
header(“Expires:Sat,1997年7月26日05:00:00 GMT”); //过去的日期
答案 2 :(得分:1)
如果我对你所做的事情是正确的,我会做以下事情:
无重定向,只是<img src="path_to_img.jpg" />
,其中path_to_img.jpg是$_GET["redirect"]
的变量,或者如果出现问题,则基于此。
没有IFrame ,但是PHP include()
答案 3 :(得分:0)
除了“额外空间”问题, PHP的标题(位置)在iframe内无效!
(我找不到这个记录,但我自己也在苦苦挣扎,所以写了一个虚拟脚本来测试它,这是真的)。
工作:当被称为“独立”时,会重定向到Google
<?php
header ('Location: http://www.google.com/');
exit ();
?>
无效:在iframe中加载上述脚本时
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="utf-8">
<title>test</title>
<meta name="author" content="Neil Hillman">
</head>
<body>
<iframe src='./redirect.php'
id='redirect'
name='redirect'
height='500'
scrolling='auto'
style='border: 1px solid grey;'>
</iframe>
</body>
</html>
自己尝试一下!