从使用AJAX打开的页面访问父页面变量


accessing parent page variables from page opened with AJAX

我正在寻找一种方法来直接访问的页面的变量加载另一个页面内的一个div在它使用ajax。我知道我可以使用某种get字符串将其传递给Javascript并打开子页面,并使用get正常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页面中的父页面变量。

简单的答案是你不能。当浏览器处理父页面时,它不知道是什么/如何生成的——它所看到的只是一个HTML页面,因此它不知道任何类型的变量。

当您使用AJAX调用另一个PHP脚本时,浏览器只是对服务器进行另一次调用。服务器上启动了一个新进程来运行该脚本——它不知道父页面的生成(现在很可能已经完成加载,脚本退出了)。

避免在ajax请求中使用GET或POST值的唯一方法是使用cookie。你可以设置一个cookie值(使用setcookie()函数)从父页面,然后读取是在ajax页面(使用$_COOKIE superglobal)。

EDIT:刚刚意识到显而易见的:您也可以使用$_SESSION在页面之间存储值。

您可以将所有父页面变量存储在$_SESSION变量中,如:

session_start();
$_SESSION['someid']['varname']=$var;

,然后在子页中访问它:

session_start();
$var=$_SESSION['someid']['varname'];

如果你希望允许用户用不同的变量值打开你的页面的多个实例,你应该将someid设置为唯一的东西,并与ajax请求一起发送,否则它可以是静态的。

如果你谈论的是HTML,那么你可以通过window.parent.document访问父页面的dom树。如果你正在谈论PHP,那么这是不可能的-我建议阅读更多关于PHP- html的客户端-服务器特性的内容。