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等等。
###代碼上的區別 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:什么情況造成跨域?
同源策略限制 不同源會造成跨域。以下任意一種情況不同,都是不同源。
http://www.baidu.com/8080/index.html
http:// | 協議不同 |
---|---|
www | 子域名不同 |
baidu.com | 主域名不同 |
8080 | 端口號不同 |
www.baidu.com | ip地址和網址不同 |
6:跨域解決方案有哪些?
1:jsonp 只能解決get跨域(問的最多)
-
原理:動態創建一個script標簽。利用script標簽的src屬性不受同源策略限制。因為所有的src屬性和href屬性都不受同源策略限制。可以請求第三方服務器數據內容。
-
步驟:
- 去創建一個script標簽
- script的src屬性設置接口地址
- 接口參數,必須要帶一個自定義函數名 要不然后台無法返回數據。
- 通過定義函數名去接收后台返回數據
//去創建一個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 協議版本。