2012-10-21 58 views
0

我創建了一個導航欄,管理員可以使用簡單的表單添加和刪除鏈接。當提交表單以添加鏈接時,會進行AJAX調用以將新信息添加到mySQL數據庫中。作爲回調函數的一部分,導航欄更新使用下面的代碼行,以包括新的鏈接:在AJAX請求期間PHP會話無法識別

$('.nav ul').load('/getnav.php'); 

文件getnav.php如下:

<?php 
    require('/connect.php'); 
    $query = "SELECT id, title, url 
      FROM nav 
      ORDER BY position ASC"; 
    $result = $mysqli->query($query); 

    while ($data = $result->fetch_assoc()) { 
     if (!empty($_SESSION['valid'])) 
      echo ' <div class="container"><button type="button" name="'.$data['id'].'" class="delButton" alt="Delete"></button></div> 
'; 
    echo ' <a href="'.$data['url'].'" alt="'.$data['title'].'">'.$data['title'].'</a> 
'; 
} 
?> 

的問題是在AJAX調用中更新導航欄時,只顯示鏈接,刪除按鈕消失。 $_SESSION['valid']已設置,所以緊跟在if之後的代碼應該執行。但是,這就是如果在AJAX調用之後缺少的代碼。我唯一的解釋是,當getnav.php被加載到.nav ul時,會話沒有被訪問。任何人都知道這是爲什麼?

+0

您是否在getnav.php的任何地方開始會話?我看到你試圖訪問會話變量,但直到會話開始,你不能 – clementine

+0

哦,這可能是。我在html中使用'require('getnav.php')',並且已經在該頁面上啓動了一個會話,所以我必須在getnav.php中刪除它。我必須以某種方式來解決這個問題。 – fvgs

+0

所以我必須在html頁面上有'session_start()',我必須在頁面上有'require('/ getnav.php')',而getnav.php也必須有'session_start()'。有關如何在不破壞會話的情況下完成此任務的想法,顯然不需要在同一頁面上調用session_start()兩次? – fvgs

回答

0

這是很難診斷沒有完整的代碼。

  • 您是否使用session_start()開始會話; ?

  • 你可以嘗試var_dump $ _SESSION嗎?

0

我想我可以創建一個版本getnav.php的不具有session_start(),將被用於當我打電話require('/getnav.php'); HTML頁面上。然後,我創建了另一個版本的getnav.php,它具有session_start()幷包含原始內容,該內容將用於AJAX調用。

它應該解決問題,但它不是一個真正令人滿意的解決方案。歡迎提供更好的建議!

0

好吧,我想通了。

通過在第一個session_start()後面使用session_write_close();,我可以在getnav.php中再次使用session_start(),而不會出現任何錯誤。