3

$_GET$_SESSIONおよびXMLHttpRequest. _ 問題を説明するために、最小限の実例を作成しました。

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>';

?>

ブラウズ.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 がリクエストされたとき、セッション変数は設定されていません! ボタンを 1 回クリックすると、次のようになります。

ふー

何が間違っているのでしょうか?前もって感謝します :)

4

1 に答える 1

2

browser.phpsession_start();の先頭に追加する必要があります。(マークBがあなたの質問にコメントしたように)。

すでにセッションを開始している別のスクリプトにどのスクリプトが含まれていたかわからない場合は、次を使用できます。

if(!session_id()) session_start();

すべての php スクリプトの先頭。

あなたの推論に:

サーバー要求が非常に小さいため、async パラメーターを false に設定しました。

問題はネットワーク通信であり、応答のサイズに関係なく、かなりの時間 (場合によっては永久に) ページがフリーズする可能性があります。

于 2013-06-19T14:25:48.457 に答える