0

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

4

3 回答 3

2

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

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

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

编辑:刚刚意识到很明显:您还可以使用$_SESSION在页面之间存储值。有关更多信息,请参阅@Ratzor 的答案。

于 2013-06-06T11:33:02.090 回答
1

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

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

然后在子页面中访问它:

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

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

于 2013-06-06T11:38:32.477 回答
0

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

于 2013-06-06T11:36:09.287 回答