我正在寻找一种方法来直接访问使用ajax在其中的div中加载另一个页面的页面的变量。 我知道我可以使用某种get字符串将它传递给Javascript并使用它打开子页面并使用get normal GET函数检索变量,我正在寻找更好的解决方案。 我有这个父页面:
<body onLoad="control_post_data(<?php
echo true;
//echo isset($_COOKIE['username']); // allow after login is done
?>)">
<div id="publish_page">
</div>
这是脚本:
function control_post_data(bool){
var div = document.getElementById("publish_page");
var xmlhttp = createXmlHttpRequestObject();
if(bool){
//user is registered presend post page
xmlhttp.onreadystatechange=function()
{
if (xmlhttp.readyState==4 && xmlhttp.status==200)
{
var responseText = xmlhttp.responseText;
div.innerHTML = responseText;
//Use the response text to add the extra row
}
}
xmlhttp.open("GET","sub_published.php",true);
xmlhttp.send();
} else {
//present log in/register page
xmlhttp.onreadystatechange=function()
{
if (xmlhttp.readyState==4 && xmlhttp.status==200)
{
var responseText = xmlhttp.responseText;
div.innerHTML = responseText;
//Use the response text to add the extra row
}
}
xmlhttp.open("GET","login.php",true);
xmlhttp.send();
}
}
我正在尝试访问sub_published.php页面中的父页面变量。
答案 0 :(得分:2)
简单的答案是,你做不到。当浏览器处理父页面时,它不知道是什么/如何生成它 - 它看到的只是一个HTML页面,因此它没有任何它所知道的变量。
当您使用AJAX调用另一个PHP脚本时,浏览器只是再次调用服务器。在服务器上启动一个新进程来运行该脚本 - 它不知道父页面生成(现在很可能已经完成加载,并且退出了脚本)。
避免在ajax请求中使用GET或POST值的唯一方法是使用cookie。您可以从父页面设置cookie值(使用setcookie()
function),然后在ajax页面中阅读(使用$_COOKIE
superglobal)。
编辑:刚刚意识到显而易见:您还可以使用$_SESSION
在页面之间存储值。有关详细信息,请参阅@ Ratzor的答案。
答案 1 :(得分:1)
您可以将所有父页面变量存储在$ _SESSION变量中,例如:
session_start();
$_SESSION['someid']['varname']=$var;
然后在子页面中访问它:
session_start();
$var=$_SESSION['someid']['varname'];
如果您希望允许用户在变量中打开具有不同值的页面的多个实例,则应将someid设置为唯一的并使用ajax请求发送,否则它可以是静态的。
答案 2 :(得分:0)
如果您正在谈论HTML,那么您可以通过window.parent.document访问父页面的DOM树。如果您正在谈论PHP,那么它是不可能的 - 我建议您阅读更多关于PHP-HTML的客户端 - 服务器性质。