2016-04-02 31 views
0

首先,讓我說,我知道這似乎並不是一個罕見的問題。我不打算用這些已經回答的問題來混淆這些論壇,但是,我已經完成了大概三十多個有類似問題的線索,並且一直未能找到解決方案。標題(位置:)通過AJAX不重定向

我的問題的簡短描述是這樣的:我試圖在使用php的頭(位置:)函數提交表單後重定向,並且它不重定向。這有點複雜,因爲表單是通過AJAX提交的。我的代碼經過的步驟如下:

用戶提交表單>通過AJAX發送的表單數據>表單處理頁面驗證數據>如果有效,表單處理頁面將數據插入數據庫>如果提交成功,表單處理頁面添加重定向URL到$ _SESSION>表單處理頁面返回一個'重定向'變量> javascript/AJAX檢查重定向變量,並刷新頁面,如果找到>頁眉檢查重定向URL $ _SESSION,如果找到,設置適當的標題和退出。

我猜我想問的第一件事是,這是正確的方式去做這件事嗎?在我看來,應該有一個更簡單的方法來做到這一點。顯然,將重定向URL傳遞給javascript並執行window.location重定向要簡單得多,但我讀到在服務器端處理它好得多/更安全,所以我正在嘗試這樣做。

假設我正朝着正確的方向前進,可能會出現什麼問題?我檢查過前後的空格,BOM字符,我甚至嘗試過輸出緩衝,我仍然有同樣的問題。

表單提交會發生什麼,頁面刷新,但它返回到原始表單頁面,而不是重定向url。我已經打開了最詳細的錯誤報告,並沒有得到任何錯誤。

有一件事情可能感興趣,也可能不感興趣,我設置了一個error_log函數,在設置Location:標題後立即將所有標題記錄到文件中。當我在AJAX之外重定向(工作)時,accept:頭被設置爲html,但是當我嘗試通過AJAX完成時,accept頭被設置爲JSON。這會導致問題嗎?

非常感謝您抽出時間,並再次表示道歉,如果這是一個愚蠢的問題。我已經使用了這個論壇多年,並且從來沒有提過一個問題,因爲它直到現在一直解決我的問題。提前致謝!

+0

'window.location'與發送頭中的位置一樣好。無論如何,你無法控制客戶實際上做了什麼。只有使用ajax時,才能通過PHP更改原始頁面位置。去JS或不使用Ajax。 – m02ph3u5

回答

0

PHP過於慷慨,不僅在您的代碼中包含HTML代碼,還包括JavaScript代碼。我會解釋一件事。當你通過ajax發送數據時,往往很難返回布爾數據(無論是true還是false,取決於我們工作的服務器端使用php的某些文件在我們的方向ajax建立的服務器)給出最終答案。另一方面,回到PHP的慷慨大方時,總是當我們嘗試驗證數據服務器端並通過ajax時,我們可以自由地操作那些可以自由工作的部分來顯示一些響應消息,並將其重定向到您的某個地方頁面或創建會話。無論如何,無論如何。

我的意思是說,在你要使用AJAX的控制器部分中,你可以設置不同的條件。也就是說,如果用戶數據是正確的,那麼你可以發送調用腳本從Javascript重定向他與location.reload();並自動分配會話。如果用戶沒有正確的數據,那麼我們應該做的是返回警告信息或警報出口AJAX,通常它會經過:

function (response) { 
$ ('.answer').html(response); 
} 

請注意,這是沒有必要的要求,例如,$('.answer')。html(響應);返回一個答案,因爲ajax只向服務器發送數據,並且如果有回覆消息,並且不好。很多時候,我所做的是通過控制檯發送消息,雖然這樣做通常很方便,因爲經常在多個條件下工作,並且取決於我們請求的結果,我們將被迫在某些元素中顯示某些響應在我們的代碼中。

我建議你在JavaScript中使用JavaScript,因此重定向到其他頁面,分配會話或直接返回消息。請記住,ajax請求不僅是異步的,而且是重複性的,並且可以根據需要隨時發送它。事實上,你發送你的ajax調用PHP文件,你已經返回一個答案,並不意味着你可以回去與它一起工作,一旦你完成你的ajax請求。

這是正確的方式來做你想做的事情,它往往更容易操縱我們的服務器端代碼,客戶端。問候。