3

在使用和时$_GET,我需要一些帮助。我已经构建了一个最小的工作示例来说明这个问题:$_SESSIONXMLHttpRequest

索引.php

    <?php
    session_start();    
    $_SESSION['current'] = 2;
    ?>

    <html>
        <head>          
            <script type="text/javascript" src="jquery.js"></script>
            <script type="text/javascript" src="ajax.js"></script>      
        </head>
        <body>
            <div id="content"><?php include('table.php'); ?></div>      
        </body>
    </html>

表.php

<?php
if(isset($_GET['current']))
{
    $_SESSION['current'] = $_GET['current'];
}

$current = $_SESSION['current'];

echo '<h1>Table Value = '.$current.'<br>';

?>

浏览.php

<?php

if(isset($_GET['current']))
{

    $_SESSION['current'] = $_GET['current'];
}

$current = $_SESSION['current'];

echo '<h1>Browse value = '.$current.'<br>';
print "<input type=\"button\" value=\"Click here\" onclick=\"myfunc($current)\"/>&nbsp;";

?>

ajax.js

function myfunc(input) {
    xmlhttp = new XMLHttpRequest();

    xmlhttp.open("GET","table.php?current=" + (input+1),false);
    xmlhttp.send();
    document.getElementById("content").innerHTML=xmlhttp.responseText;      


    xmlhttp.open("GET","browse.php",false);
    xmlhttp.send(); 
    document.getElementById("target").innerHTML=xmlhttp.responseText;       
}

我使用 Firebug 控制台来跟踪正在发生的事情。首先让我指出,我将 async 参数设置为 false,因为我的服务器请求非常小。当我单击该按钮时myfunc(2),它会执行并./table.php?current=3./browser.php服务器请求。

我的想法是,由于我./table.php?current=3首先请求,会话变量$_SESSION['current']将设置为 3。但是当请求 browse.php 时,会话变量未设置!这是我单击一次按钮后发生的情况:

富

知道可能出了什么问题吗?提前致谢 :)

4

1 回答 1

2

您需要在browser.phpsession_start();的开头添加。(正如 Marc B 对您的问题的评论)。

如果您不确定哪个脚本包含在另一个已经启动会话的脚本中,您可以使用

if(!session_id()) session_start();

在每个 php 脚本的开头。

根据你的推理:

我将 async 参数设置为 false,因为我的服务器请求非常小。

问题是网络通信可能会冻结您的页面很长一段时间(或在某些情况下永久冻结),无论响应的大小如何。

于 2013-06-19T14:25:48.457 回答