近日新看了幾篇關於ajax的文章准備試試新,至於方式我選擇了在jsp頁面中使用ajax,至於如何在servlet和struct中使用在后續幾天我會分別試驗一下。
實現描述:很簡單的例子,就是用戶在注冊的時候當輸入完用戶名后,自動去數據庫中查詢,如果用戶名重復則提示用戶。
知識點:ajax的使用,相關控件事件,jscript中動態生成HTML(innerHTML)
過程描述:至於大體過程,我就不贅述了,只是說說在過程中遇見的疑惑和解決辦法。
一、關於Input控件中onClick,onChange,onFocus三個事件的選擇。我的第一個想法是在用戶單擊“密碼”輸入框的時候通過ajax機制去查詢數據庫,如果這樣的話我會在“密碼”輸入框中運用onClick事件,但是通過實驗證明這個過程中存在一個漏洞就是用戶如果不用鼠標移動焦點而是使用TAB鍵來切換焦點那么是不會觸發ajax檢測機制的~~~~cut!!!
再來說說onFocus事件,這個造成的后果就是如果光標在某個待觸發ajax機制的輸入框的時候,會不停的觸發檢測函數,如果你用alert測試的話,他會不知疲倦的再次跳出來~~~~cut!!!
最后說說onChange事件,他的觸發是建立在輸入框中的文字產生變化,並且焦點從該輸入框離開的時候才觸發,所以他才是最適合的~~~~ok!!!
二、再來說說ajax返回值的問題,js中通過http_request.responseText獲得服務器端程序的輸出,所謂的服務器端輸出也就是一個jsp頁面中out.print語句向客戶端送出的信息。我的思路是:如果數據庫中有重復用戶才對客戶端產生輸出,如果沒有則通過檢測responseText的長度為0或者是否為空(這點我沒有核實輸出是“”還是null)來界定。但是問題出來了即使什么都不輸出的時候,客戶端接受的字符串都不符合上述我假想的長度為0和null的情況,最小長度總是為4,后來在實在無奈的情況下我使用了自己寫的js中trim函數處理它,這回得以解決,所有的未知字符被濾除,哈哈,我突然又有了一種想法是不是如果我在jsp頁面輸出之前執行out.clear()也能解決問題呢?呵呵,明天驗證一下了。