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

时间:2013-06-06 11:28:45

标签: php javascript ajax

我正在寻找一种方法来直接访问使用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页面中的父页面变量。

3 个答案:

答案 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的客户端 - 服务器性质。