2010-09-03 92 views
0

希望你能幫上忙。這裏有一些jQuery/AJAX newb。SimpleModal PHP登錄表單:如何重定向成功/失敗

我有一個基本的SimpleModal登錄表單,可以從我的網站的主頁中調用。

login.js調用login.php腳本來檢查我的數據庫中的用戶憑證。

如果登錄成功,我設置了幾個會話變量,我通常使用header命令將用戶發送到他們的個人頁面(或登錄失敗時的錯誤頁面)。

例如。標題( 「位置:限制/ index.php的」);

我無法獲取模態登錄表單關閉,父主頁重定向到成員頁面。我通常留下空白模式方說「謝謝你」

,如果我嘗試用

success: function (data) { 
$('#login-container .login-loading').fadeOut(200, function() { 
    $('#login-container .login-title').html('Thank you!'); 
    msg.html(data).fadeIn(200); 
    $.modal.close(); //have inserted this line 
}); 
}, 

模態關閉關閉模式窗體,但我留在主頁上。 (用戶在此階段登錄,但重定向尚未發生)。

我一直踢這一天或2我看看wordpress登錄插件,但我沒有更聰明。有任何想法嗎?

回答

2

其實重定向大概確實發生了,它剛剛發生了裏面的這個AJAX請求。當你進行重定向時,ajax函數使用的XmlHttpRequest將會透明地跟隨它,所以返回給客戶端的頁面是restricted/index.php。我傾向於做的就是添加上頁,像這樣的標題:

header("Redirect:restricted/index.php"); 

然後找頭,像這樣使用$.ajaxSetup()

$.ajaxSetup({ 
    complete: function (xhr) { 
    var redirect = xhr.getResponseHeader('Redirect'); 
    if(redirect) window.location.href = redirect; 
    } 
}); 

這種方式(除非你覆蓋complete,它使這個選項打開),當一個請求返回到restricted/index.php(記得XmlHttpRequest實際去那裏)時,它會得到一個頭讓客戶知道它需要重定向。

+0

感謝您的回覆。是的,重定向確實發生在幕後。 AJAX新手 - 很難看到發生了什麼。所以我現在有>標題(「重定向:restricted/index.php」);在目標頁面restricted/index.php,我現在有重定向HTTP標頭。究竟應該在哪裏放置ajaxSetup函數,以及如何調用它。對不起,這樣一個愚蠢的問題。我在頁面代碼中使用> if(redirect)alert(redirect);在腳本標籤內調試行但它沒有運行。謝謝! – chakotha 2010-09-07 11:09:02

+0

@ user438858 - 如何*不*重定向,而是發送一個不同的頭部給客戶端,以便他們*可以重定向,就像我上面所說的那樣...如果登錄成功,您只需添加該頭部? – 2010-09-07 11:14:24

+0

@ user438858 - 在發出任何Ajax請求之前,可以在任何地方調用它,只需要一次就可以調用。如果ajax請求有自己的'complete',你需要改變一下方法,是這樣嗎? – 2010-09-07 11:15:30