2011-10-23 56 views
0

我有一個表格,使用下面的JS代碼在頭(form.php的):如何通過Javascript將一個php會話從一個頁面轉移到另一個頁面?

<script type="text/javascript"> 
$(document).ready(function(){ 
$("a").click(function(){ 

$.post('test.php', function(data) { 
     $('#test').html(data); 
    }); 
    }); 
}); 
</script> 

一個有form.php的,一旦點擊我想要一個下拉出現一個鏈接(不刷新頁面)例如「顯示下拉」。下拉菜單中的代碼在test.php中進行管理。

Test.php從另一個服務中提取數據。爲了獲得這些數據,我使用會話中保存的數據,例如$ _SESSION [ 'data_that_is_sent_to_another_service']。

我在form.php中啓動會話,但爲了讓test.php從其他服務中獲取信息,我需要在test.php開始時啓動一個會話。

代碼工作,但後來我得到一個警告說:

Warning: session_start() [function.session-start]: 
Cannot send session cache limiter - headers already sent 
(output started at /..my directory.../test.php:1) in /...my directory.../hrdeals.php on line 4 

我怎樣才能得到這樣的警告沒有出現(沒有PHP關閉警告)?

任何幫助非常感謝。

格雷戈爾

PS - JS的可能是不正確的,但它更在SESSION的問題,我可以解決

+0

請使用搜索:[「無法發送會話緩存限制器」](http://stackoverflow.com/search?q=%5Bphp%5D+%22cannot+send+session+cache+limiter%22&submit=search)/ [「標題已發送」](http://stackoverflow.com/search?q =%5Bphp%5D +%22headers + already + sent%22&submit = search) – Gumbo

+0

當你收到一個包含'headers already sent'的錯誤時,它會告訴你你要做的事情*輸出(包括空格),包括「include/require」其他文件。所以你必須在輸出任何東西之前調用'session_start()'(和'header()')。 –

+0

Gumbo謝謝你。你能推薦一個搜索引擎嗎? – gelviis

回答

3

session_start()必須outputing什麼瀏覽器之前被調用。檢查test.php並確保沒有輸出。

+0

這是我的觀點,已經有輸出(位於form.php頁面的頂部),所以當我調用test.php時,我再次調用SESSION,這給了我這個警告。我如何解決這個問題?理想情況下,你開始一次會話,然後我不需要在test.php中啓動它。 test.php中沒有任何輸出(它只是PHP代碼,沒有回聲等) – gelviis

+0

不,這應該不是問題,因爲這兩個文件(form.php和test.php)都是獨立執行的。你可能會在test.php文件中有一些輸出(也許只是'<?'之前的空格)。請發佈test.php的內容。 – middus

+0

感謝middus,我清除了所有的空間,但沒有工作 - 我只是將代碼複製到一個名爲test2.php的新文件,它工作...不知道發生了什麼事!但現在修好了。非常感激。 – gelviis

0
  1. Javascript和PHP會話與另一個無關。 Javascript存在於它的小泡泡(客戶端渲染/處理)中。 PHP存在於其泡沫(服務器端處理/輸出)中。

  2. 你得到的錯誤是(簡要地) - 頭文件已經發送。

這是指http頭(不是標頭,你可能有一些JavaScript)。您可以在此處看到整個列表:http://en.wikipedia.org/wiki/List_of_HTTP_header_fields

當您在輸出標頭之前開始呈現網頁內容時發生此錯誤。所有標題必須先完成。

檢查從php發出的所有回聲和打印都發生在session_start()發生後。打印蠕變的一個棘手的地方是當你結束php標籤並且有什麼東西時 - 即使它在頁面的末尾。你不需要在你的頁面結尾處結束php標籤,甚至在下一個空格之後的空格都會導致這種問題。最安全的事情就是刪除php文件底部的所有結尾php標籤。

另一個棘手的問題是,這種錯誤也是由代碼編輯器輸出的「Byte Order Mark」造成的。您可以嘗試在簡單的純文本編輯器中打開,修復和保存頁面,看看是否能解決問題。

相關問題