麻烦$ _GET,$ _SESSION和XMLHttpRequest

时间:2013-06-19 14:12:57

标签: php javascript http

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

的index.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>

table.php

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

$current = $_SESSION['current'];

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

?>

browse.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时,会话变量未设置!这是我单击按钮一次后发生的事情:

foo

知道可能出错的是什么?在此先感谢:)

1 个答案:

答案 0 :(得分:2)

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

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

if(!session_id()) session_start();

在每个PHP脚本的开头。

根据你的推理:

  

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

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