什么是ajax瑞信?它的應用場景是什么?它的運行原理是什么美旧?
ajax是瀏覽器提供的一套方法渤滞,可以實現(xiàn)頁面無刷新更新數(shù)據(jù),提高用戶瀏覽網(wǎng)站應用的體驗榴嗅。
Ajax 應用場景
- 頁面上拉加載更多數(shù)據(jù)
- 列表數(shù)據(jù)無刷新分頁
- 表單項離開焦點數(shù)據(jù)驗證
- 搜索框提示文字下拉列表
Ajax的運行原理相當于瀏覽器發(fā)送請求與接收響應的代理人妄呕,以實現(xiàn)在不影響用戶瀏覽頁面的情況下,局部更新頁面數(shù)據(jù)嗽测,從而提高用戶體驗绪励。
使用原生js寫出一個簡單的ajax請求
//第一步:創(chuàng)建ajax對象
var xhr = new XMLHttpRequest();
//第二步:告訴ajax對象要向哪發(fā)送請求,以什么方式發(fā)送
xhr.open('get','http://127.0.0.1:3000/first');
//第三步:發(fā)送請求
xhr.send();
//第四步:獲取服務器端響應到客戶端
xhr.onload = function(){
console.log(xhr.responseText);
}
使用jquery寫出一個簡單的ajax請求
$.ajax({
url:'/api',
type:'post',
data:{},
dataType:'json',
success:function(res){
console.log(res);
}
})
服務端響應的數(shù)據(jù)格式
在真實的項目中唠粥,服務器端大多數(shù)情況下會以 JSON對象作為響應數(shù)據(jù)的格式疏魏。當客戶端拿到響應數(shù)據(jù)時,要將 JSON 數(shù)據(jù)和 HTML 字符串進行拼接晤愧,然后將拼接的結果展示在頁面中大莫。
在 http 請求與響應的過程中,無論是請求參數(shù)還是響應內容官份,如果是對象類型只厘,最終都會被轉換為對象字符串進行傳輸。
JSON.parse() // 將 json 字符串轉換為json對象
常見的http狀態(tài)碼都有哪些舅巷?
100=>正在初始化(一般是看不到的)
101=>正在切換協(xié)議
200或者以2開頭的兩位數(shù)=>都是代表響應主體的內容已經(jīng)成功返回了
202=>表示接受
301=>永久重定向/永久轉移
302=>臨時重定向/臨時轉移(一般用來做服務器負載均衡)
304=>本次獲取的內容是讀取緩存中的數(shù)據(jù)羔味,會每次去服務器校驗
400=>參數(shù)出現(xiàn)錯誤
401=>未認證,沒有登陸網(wǎng)站
403=>禁止訪問钠右,沒有權限
404=>客戶端訪問的地址不存在
500=>未知的服務器錯誤
503=>服務器超負荷
http請求方式有幾種介评?
get 請求指定的頁面信息,并返回實體主體爬舰。
head 類似get請求们陆,只不過返回的響應中沒有具體的內容,用于獲取報頭
請盡可能詳盡的解釋ajax的工作原理
第一步:創(chuàng)建一部對象var xhr = new XMLHttpRequest()情屹;
第二步:設置請求行xhr.open('請求方式','請求地址')坪仇;
第三步:發(fā)送請求Get方式xhr.send(null),
如果是post請求還要設置請求頭
xhr.setRequestHeader('Content-Type','application/x-www-form-urlencoded');
xhr.send("name=zs&age=18");
// 監(jiān)聽服務端的響應
xhr.onreadystatechange=function(){
if(xhr.status==200&&xhr.readyState==4){
//獲取json
var json = xhr.responseText&&JSON.parse(xhr.responseText)
//獲取xml
var xml = xhr.responseXML;
console.log(json,xml)
}
}
頁面編碼和被請求的資源編碼如果不一致如何處理?
a.html的編碼是gbk或者gb2312的垃你,而引入的js編碼為utf-8的椅文,那就需要在引入的時候
<script src="http://www.xxx.com/test.js" charset="utf-8"></script>
同理,如果你的頁面是utf-8的惜颇,引入js是gbk的皆刺,那么就需要加上charset="gbk".
如何解決跨域問題?
jsonp凌摄,服務器代理羡蛾,cors
jsonp的跨域原理是什么?
動態(tài)在頁面中創(chuàng)建一個script標簽锨亏,使其src屬性指向后端數(shù)據(jù)接口痴怨,后端數(shù)據(jù)接口必須返回一個js函數(shù)的調用字符串(如cb('{"name":"zs","age":"18"}'))忙干,將要返回給前端的json數(shù)據(jù)作為函數(shù)的實參,當script標簽加載完畢后會在瀏覽器中執(zhí)行后端返回的函數(shù)調用浪藻,所以可以在函數(shù)內部拿到服務端調用的時候傳入的實參捐迫,所以就間接實現(xiàn)了跨域請求數(shù)據(jù)。
什么是同步和異步爱葵?哪種執(zhí)行方式更好施戴?
同步是指一個程序執(zhí)行完了接著執(zhí)行另外一個程序,異步是指多個程序同步進行萌丈,所以異步效率更高暇韧,因為異步不會出現(xiàn)阻塞現(xiàn)象,前一個程序的執(zhí)行不會影響后一個程序的執(zhí)行浓瞪。
get和post的區(qū)別,何時使用post巧婶?
get是將要傳遞的參數(shù)拼在url中進行傳遞乾颁,傳遞數(shù)據(jù)量少,不安全艺栈;
post是將傳遞的參數(shù)放在請求體里傳遞英岭,攜帶數(shù)據(jù)量大,相對安全湿右,要提交一些敏感數(shù)據(jù)(比如登陸密碼)诅妹,上傳文件時,必須使用post請求毅人。
請解釋下javascript的同源策略吭狡?
同源策略是瀏覽器的一項安全策略,瀏覽器只允許js代碼請求和當前所在服務器域名丈莺,端口划煮,協(xié)議相同的數(shù)據(jù)接口上的數(shù)據(jù),這就是同源策略缔俄。
一個頁面從輸入url到頁面加載顯示完成弛秋,這個過程中都發(fā)生了什么?
首先根據(jù)域名查詢DNS服務器獲取服務器IP俐载,然后拿著服務器IP和域名請求對應的服務器蟹略,請求成功后web服務器會根據(jù)一系列運算,將客戶端需要的數(shù)據(jù)通過網(wǎng)絡傳輸?shù)娇蛻舳藶g覽器遏佣,最終由瀏覽器解析后呈現(xiàn)給終端用戶挖炬。
網(wǎng)站從http協(xié)議切換到https協(xié)議需要對代碼做哪些處理?
不需要對代碼做任何處理状婶,只需要在web服務器中加入一個ssl的安全認證模塊即可茅茂。
什么是RESTful API捏萍?
RESTful的核心思想是,客戶端發(fā)出的數(shù)據(jù)操作指令都是“動詞+賓語”的結構空闲,比如GET/articles這個命令令杈,GET是動詞,/articles是賓語碴倾。
補充說明:
動詞通常就是五種HTTP方法逗噩,對應CRUD操作:
GET:讀取 Read
POST:新建 Create
PUT:更新 Update
PATCH:更新 Update,通常是部分更新
DELETE:刪除 Delete