2011-03-28 137 views
0

嘿所有..在荷蘭有GJ的問題。ajax身份驗證

我很忙,我的第一個AJAX網絡編程,真的很喜歡這裏一個PHP文件(索引)加載的想法,從那裏xmlhttprequest能夠加載和刷新div的內容,而無需刷新頁面。

事情到目前爲止運行良好,大約4個div部分根據您按哪個menubutton(全部通過getdata函數和xmlhttprequests)獲取不同的內容。

我最後一步是整合一個額外的autenthication div。我想實現一個很好的jquery淡入淡出系統與login.php與用戶名和傳遞的輸入字段;一個process_login.php,它將數據與mysql進行比較,如果匹配或不匹配則返回;最後是一個安全的頁面,用戶在成功授權後可以註銷。 當我直接在瀏覽器中加載login.php時,這些頁面似乎毫無用處地工作。

當我在login.php上使用getdata和xmlhttprequest將它加載到index.html的div部分時,沒有任何工作,因爲它似乎無法再使用login.php頁面上聲明的函數

閱讀阿賈克斯假人不給我任何答案,雖然我確定必須有一個容易理解的邏輯解釋這個事實。

我不能讓我的頭周圍it..please任何信息,歡迎...迎接

GJ

回答

0

至於爲什麼.....我不知道爲什麼這樣的行爲如此。

但是至於修復/解決方法。我在目前類似的情況下在頁面加載(實際上是asp/jscript而不是php)。發現的是,您在加載的頁面中編寫的腳本在通過AJAX加載時不再可用。如果正在加載的頁面包含applet或其他html對象類型的標記,我遇到了同樣的問題。

對此的解決方案是將腳本移動到服務器上的外部文件,從那裏你的頁面將能夠達到他們無論它是由AJAX加載爲面板是一個獨立的頁面

例子:(這顯然是JScript中,而不是PHP,但加載將是相似的) 頁的login.asp包含<head>

<script type="text/javascript" src="scripts.js"></script> 
1

的JavaScript通過Ajax加載不會成爲窗口的一部分。您必須明確執行它(例如使用eval)。這個問題沒有直接的解決方案,因此您需要爲應用程序提供一個模型,以瞭解通過ajax加載的某些資源所需的資源。

做到這一點的最好方法是創建一些應用程序範圍的約定 - 例如,設置頁面&腳本文件的交叉引用,並使用$.getScript按需加載它們。理想情況下,您會在嘗試重新加載之前檢查資源是否已經加載。

這裏有一個簡單的想法,你可以使用。在您的login.php的輸出中,在頂部添加一個標籤,例如

<span id="script" style="display:none">login,/scripts/login.js</span>

然後Ajax調用加載一個頁面,這樣做後:

data = $('#wrapper').find('#script').html().split(','); 
if (!window[data[0]]) { 
    $.getScript(data[1]); 
} 

所以基本上你傳遞一些信息,該裝載機使用找出HTML是什麼它需要。第一個參數是一個命名空間,所以你可以檢查它是否已經加載。第二個是腳本的路徑。

你可以充實這個來解釋多個腳本,使用JSON作爲數據格式等等,但這是一個基本的想法。

是的,你總是可以包括所有你的腳本,但是按需加載對於任何非平凡的應用程序來說都是一個好主意,所以你不需要使用不需要的腳本來混淆事物。畢竟每個會話只需要登錄腳本一次。