ajax常見面試題

1:什麼是ajax?ajax做用是什麼?

異步的javascript和xml  AJAX 是一種用於建立快速動態網頁的技術。  ajax用來與後臺交互
複製代碼

2:原生js ajax請求有幾個步驟?分別是什麼

//建立 XMLHttpRequest 對象
var ajax = new XMLHttpRequest();
//規定請求的類型、URL 以及是否異步處理請求。
ajax.open('GET',url,true);
//發送信息至服務器時內容編碼類型
ajax.setRequestHeader("Content-type", "application/x-www-form-urlencoded"); 
//發送請求
ajax.send(null);  
//接受服務器響應數據
ajax.onreadystatechange = function () {
    if (obj.readyState == 4 && (obj.status == 200 || obj.status == 304)) { 
    }
};
複製代碼

3:json字符串轉換集json對象、json對象轉換json字符串

//字符串轉對象
JSON.parse(json)
eval('(' + jsonstr + ')')   
// 對象轉字符串
JSON.stringify(json)
複製代碼

4:ajax幾種請求方式?他們的優缺點?

經常使用的post,get,delete。不經常使用copy、head、link等等。javascript

###代碼上的區別
 1:get經過url傳遞參數
 2:post設置請求頭  規定請求數據類型
###使用上的區別
 1:post比get安全
 (由於post參數在請求體中。get參數在url上面)
 2:get傳輸速度比post快 根據傳參決定的。
 (post經過請求體傳參,後臺經過數據流接收。速度稍微慢一些。而get經過url傳參能夠直接獲取)
 3:post傳輸文件大理論沒有限制  get傳輸文件小大概7-8k ie4k左右
 4:get獲取數據	post上傳數據
 (上傳的數據比較多  並且上傳數據都是重要數據。因此不論在安全性仍是數據量級 post是最好的選擇)
複製代碼

5:什麼狀況形成跨域?

同源策略限制 不一樣源會形成跨域。如下任意一種狀況不一樣,都是不一樣源。php

http://www.baidu.com/8080/index.htmlhtml

http:// 協議不一樣
www 子域名不一樣
baidu.com 主域名不一樣
8080 端口號不一樣
www.baidu.com ip地址和網址不一樣

6:跨域解決方案有哪些?

1:jsonp 只能解決get跨域(問的最多)

  • 原理:動態建立一個script標籤。利用script標籤的src屬性不受同源策略限制。由於全部的src屬性和href屬性都不受同源策略限制。能夠請求第三方服務器數據內容。
  • 步驟:
  1. 去建立一個script標籤
  2. script的src屬性設置接口地址
  3. 接口參數,必需要帶一個自定義函數名 要否則後臺沒法返回數據。
  4. 經過定義函數名去接收後臺返回數據
//去建立一個script標籤
var  script = document.createElement("script");
//script的src屬性設置接口地址 並帶一個callback回調函數名稱
script.src = "http://127.0.0.1:8888/index.php?callback=jsonpCallback";
//插入到頁面
document.head.appendChild(script);
//經過定義函數名去接收後臺返回數據
function jsonpCallback(data){
    //注意  jsonp返回的數據是json對象能夠直接使用
    //ajax  取得數據是json字符串須要轉換成json對象纔可使用。
}

複製代碼

2:CORS:跨域資源共享

  • 原理:服務器設置Access-Control-Allow-OriginHTTP響應頭以後,瀏覽器將會容許跨域請求
  • 限制:瀏覽器須要支持HTML5,能夠支持POST,PUT等方法兼容ie9以上
須要後臺設置
Access-Control-Allow-Origin: *              //容許全部域名訪問,或者
Access-Control-Allow-Origin: http://a.com   //只容許全部域名訪問
複製代碼

3:設置 document.domain

  • 原理:相同主域名不一樣子域名下的頁面,能夠設置document.domain讓它們同域
  • 限制:同域document提供的是頁面間的互操做,須要載入iframe頁面
// URL http://a.com/foo
var ifr = document.createElement('iframe');
ifr.src = 'http://b.a.com/bar'; 
ifr.onload = function(){
    var ifrdoc = ifr.contentDocument || ifr.contentWindow.document;
    ifrdoc.getElementsById("foo").innerHTML);
};

ifr.style.display = 'none';
document.body.appendChild(ifr);
複製代碼

4:用Apache作轉發(逆向代理),讓跨域變成同域

7:http常見狀態碼有哪些?

一: 2開頭狀態碼

2xx (成功)表示成功處理了請求的狀態代碼
200 (成功) 服務器已成功處理了請求。 一般。
複製代碼

二: 3開頭狀態碼

3xx (重定向) 表示要完成請求,須要進一步操做。 一般,這些狀態代碼用來重定向。
304 (未修改) 自從上次請求後,請求的網頁未修改過。 服務器返回此響應時,不會返回網頁內容。
複製代碼

三: 4開頭狀態碼

4xx(請求錯誤) 這些狀態代碼表示請求可能出錯,妨礙了服務器的處理
1:400 (錯誤請求) 服務器不理解請求的語法。
 
2:403 (禁止) 服務器拒絕請求。

3:404 (未找到) 服務器找不到請求的網頁。
複製代碼

四: 5開頭狀態碼

5xx(服務器錯誤)這些狀態代碼表示服務器在嘗試處理請求時發生內部錯誤。 這些錯誤多是服務器自己的錯誤,而不是請求出錯
500 (服務器內部錯誤) 服務器遇到錯誤,沒法完成請求。

501 (還沒有實施) 服務器不具有完成請求的功能。 例如,服務器沒法識別請求方法時可能會返回此代碼。

502 (錯誤網關) 服務器做爲網關或代理,從上游服務器收到無效響應。

503 (服務不可用) 服務器目前沒法使用(因爲超載或停機維護)。 一般,這只是暫時狀態。

504 (網關超時) 服務器做爲網關或代理,可是沒有及時從上游服務器收到請求。

505 (HTTP 版本不受支持) 服務器不支持請求中所用的 HTTP 協議版本。
複製代碼
相關文章
相關標籤/搜索