ajax請求過程


原生態Ajax使用的步驟,最后告訴面試官,我們在工作中是使用jQuery來實現Ajax請求和處理的。在回答的時候盡量詳盡,包括方法的參數的個數,順序和作用,以免被面試官抓住不放。不給面試官提問的機會,那你的回答就牛逼了!

Ajax是什么

我理解Ajax 是一種異步請求數據的一種技術,對於改善用戶的體驗和程序的性能很有幫助。

Ajax的使用

 

    (1)創建`XMLHttpRequest`對象,也就是創建一個異步調用對象. (2)創建一個新的`HTTP`請求,並指定該`HTTP`請求的方法、`URL`及驗證信息. (3)設置響應`HTTP`請求狀態變化的函數. (4)發送`HTTP`請求. (5)獲取異步調用返回的數據. (6)使用JavaScript和DOM實現局部刷新. var xmlHttp = new XMLHttpRequest(); xmlHttp.open('GET','demo.php','true'); xmlHttp.send() xmlHttp.onreadystatechange = function(){ if(xmlHttp.readyState === 4 & xmlHttp.status === 200){ } }

 

 

以下步驟,如果不能理解你死記硬背都要記下來,總比你答不出來要好吧!

1.創建Ajax核心對象XMLHttpRequest

 

[javascript] view plain copy
 
  1. var xmlhttp;  
  2. if(window.XMLHttpRequest){   
  3. //IE7+,Chrome,Firefox,Safari,Opera執行此代碼 xmlhttp=new XMLHttpRequest;  
  4. }else{  
  5.    //IE5,IE6執行該代碼  
  6.    xmlhttp=new ActiveXObject("Microsoft.XMLHTTP");  
  7. }  

2.向服務器發送請求

 

[javascript] view plain copy
 
  1. xmlhttp.open(method,url,async);  
  2. xmlhttp.send();  

示例如下:

[javascript] view plain copy
 
  1. xmlhttp.open("GET","http://www.runoob.com/try/ajax/demo_get.php",true);  
  2. xmlhttp.send();  


注意一:open 的參數要牢記,很多面試官愛問這樣的細節

  • method:請求的類型;GET 或 POST
  • url:文件在服務器上的位置,相對位置或絕對位置
  • async:true(異步)或 false(同步)
  • 為什么使用 Async=true ?

    我們的實例在 open() 的第三個參數中使用了 "true"。

    該參數規定請求是否異步處理。

    True 表示腳本會在 send() 方法之后繼續執行,而不等待來自服務器的響應。

     

    onreadystatechange 事件使代碼復雜化了。但是這是在沒有得到服務器響應的情況下,防止代碼停止的最安全的方法。

    通過把該參數設置為 "false",可以省去額外的 onreadystatechange 代碼。如果在請求失敗時是否執行其余的代碼無關緊要,那么可以使用這個參數

     

注意二:post請求不同於get請求

send(string)方法post請求時才使用字符串參數,否則不用帶參數。

注意三:post請求一定要設置請求頭的格式內容

 

[javascript] view plain copy
 
  1. xmlhttp.open("POST","ajax_test.html",true);  
  2. xmlhttp.setRequestHeader("content-type","application/x-www-form-urlencoded");  
  3. xmlhttp.send("fname=Herry&lname=Ford");  

3.服務器響應處理

responseText    獲得字符串形式的響應數據。

responseXML   獲得XML 形式的響應數據。

3.1 同步處理

 

[javascript] view plain copy
 
  1. xmlhttp.open("GET","http://www.runoob.com/try/ajax/demo_get.php",false);  
  2. xmlhttp.send();  
  3. document.getElementById("mydiv").innerHTML=xmlhttp.responseText;  

直接在send()后面處理返回來的數據。

3.2 異步處理

 異步處理相對比較麻煩,要在請求狀態改變事件中處理。

[javascript] view plain copy
 
  1. xmlhttp.onreadystatechange=function () {//接收到服務端響應時觸發  
  2.      if(xmlhttp.readyState==4&&xmlhttp.status==200){  
  3.            document.getElementById("mydiv").innerHTML=xmlhttp.responseText;  
  4.       }  
  5. }  

一共有5中請求狀態,從0 到 4 發生變化。

0: 請求未初始化

1: 服務器連接已建立

2: 請求已接收

3: 請求處理中

4: 請求已完成,且響應已就緒

xmlhttp.status:響應狀態碼。這個也是面試比較愛問的,這個必須知道4個以上,比較常見的有:

200: "OK"

304:該資源在上次請求之后沒有任何修改(這通常用於瀏覽器的緩存機制,使用GET請求時尤其需要注意)。

403   (禁止) 服務器拒絕請求。

404   (未找到) 服務器找不到請求的網頁。

408  (請求超時) 服務器等候請求時發生超時。

500   (服務器內部錯誤)  服務器遇到錯誤,無法完成請求。

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM