AJAX不是JavaScript的規范,它只是一個哥們“發明”的縮寫:Asynchronous JavaScript and XML,意思就是用JavaScript執行異步網絡請求。
如果仔細觀察一個Form的提交,你就會發現,一旦用戶點擊“Submit”按鈕,表單開始提交,瀏覽器就會刷新頁面,然后在新頁面里告訴你操作是成功了還是失敗了。如果不幸由于網絡太慢或者其他原因,就會得到一個404頁面。
這就是Web的運作原理:一次HTTP請求對應一個頁面。
如果要讓用戶留在當前頁面中,同時發出新的HTTP請求,就必須用JavaScript發送這個新請求,接收到數據后,再用JavaScript更新頁面,這樣一來,用戶就感覺自己仍然停留在當前頁面,但是數據卻可以不斷地更新。
最早大規模使用AJAX的就是Gmail,Gmail的頁面在首次加載后,剩下的所有數據都依賴于AJAX來更新。
用JavaScript寫一個完整的AJAX代碼并不復雜,但是需要注意:AJAX請求是異步執行的,也就是說,要通過回調函數獲得響應。
在現代瀏覽器上寫AJAX主要依靠XMLHttpRequest對象:
function success(text) { var textarea = document.getElementById('test-response-text'); textarea.value = text;}function fail(code) { var textarea = document.getElementById('test-response-text'); textarea.value = 'Error code: ' + code;}var request = new XMLHttpRequest(); // 新建XMLHttpRequest對象request.onreadystatechange = function () { // 狀態發生變化時,函數被回調 if (request.readyState === 4) { // 成功完成 // 判斷響應結果: if (request.status === 200) { // 成功,通過responseText拿到響應的文本: return success(request.responseText); } else { // 失敗,根據響應碼判斷失敗原因: return fail(request.status); } } else { // HTTP請求還在繼續... }}// 發送請求:request.open('GET', '/api/categories');request.send();alert('請求已發送,請等待響應...');
對于低版本的IE,需要換一個ActiveXObject對象:
function success(text) { var textarea = document.getElementById('test-ie-response-text'); textarea.value = text;}function fail(code) { var textarea = document.getElementById('test-ie-response-text'); textarea.value = 'Error code: ' + code;}var request = new ActiveXObject('Microsoft.XMLHTTP'); // 新建Microsoft.XMLHTTP對象request.onreadystatechange = function () { // 狀態發生變化時,函數被回調 if (request.readyState === 4) { // 成功完成 // 判斷響應結果: if (request.status === 200) { // 成功,通過responseText拿到響應的文本: return success(request.responseText); } else { // 失敗,根據響應碼判斷失敗原因: return fail(request.status); } } else { // HTTP請求還在繼續... }}// 發送請求:request.open('GET', '/api/categories');request.send();alert('請求已發送,請等待響應...');
新聞熱點
疑難解答
圖片精選