前端經典面試題---Ajax篇
原生Ajax(相容)
function ajax(options){
options = options||{};
var xhr = window.XMLHttpRequest ? (new XMLHttpRequest()) : (new ActiveXObject("Microsoft.XMLHTTP")) ;
//onreadystatechange事件放在open()前,確保跨瀏覽器相容性
xhr.onreadystatechange = function(){
if(xhr.readyState==4){
if (xhr.status>=200&&xhr.status<300){
...
}else{
...
}
}
}
//啟動一個請求以備傳送
xhr.open('get/post','example.php',true);
//設定請求頭
xhr.setRequestHeader(...);
//傳送資料
xhr.send(null);
}
GET和POST的區別,何時使用POST
GET:一般用於資訊獲取,查詢字串引數追加在URL末尾,對所傳送資訊的數量也有限制,一般在2000個字元
//向現有URL末尾追加查詢字串
function addURLParam(url,name,value){
url += (url.index('?')==-1?'?':'&');
url += encodeURIComponent(name)+'='+encodeURIComponent(value);
return url;
}
POST:一般用於向伺服器傳送應該被儲存的資料,對所傳送的資料沒有數量和格式的限制。
注:伺服器對POST請求和提交web表單的請求不會一視同仁。
使用XHR來模仿表單提交
//XMLHttpRequest 1級寫法
...
xhr.open('post','postexample.php',true);
xhr.setRequestHeader('Content-type','application/x-www-form-urlencoded');
var form = document.getElementById('user-info');
xhr.send(serialize(form)); //serialize見頁末
//XMLHttpRequest 2級寫法
...
xhr.open('post','postexample.php',true);
var form = document.getElementById('user-info');
xhr.send(new FormData(form));
與get請求相比,post請求消耗的資源會更多一些,從效能角度,以傳送相同的資料比較,get的請求速度最多可達到post的兩倍。
GET方式需要使用Request.QueryString來取得變數的值,而POST方式通過Request.Form來獲取變數的值。
然而,在以下情況中,請使用 POST 請求:
- 無法使用快取檔案(更新伺服器上的檔案或資料庫)
- 向伺服器傳送大量資料(POST 沒有資料量限制)
- 傳送包含未知字元的使用者輸入時,POST 比 GET 更穩定也更可靠。
xhr其它的一些方法
超時設定timeout及其事件
重寫XHR響應的MIME型別 overrideMimeType()
進度事件
load可以替代readystatechange
progress 在接收響應期間不斷地觸發,會接收到一個event物件,它有三個屬性:lengthComputable(進度資訊是否可用,布林值)、position(已接收的位元組數)、totalSize(預期接收的總位元組數)。
例項:進度指示器
...
xhr.onprogress = function(event){
var divS = document.getElementById('status');
if(event.lengthComputable){
divS.innerHTML = event.position + '/' + event.totalSize
}
}
...
//表單序列化 (瞭解)
function serialize(form){
var parts=[],field=null,i,len,j,optLen,option,optValue;
for(i=0,len=form.elements.length;i<len;i++){
field=form.elements[i];
switch(field.type){
case "select-one"://單選列表預設處理
case "select-multiple"://對多選列表的處理最複雜,逐項判斷和累加
if(field.name.length){
for(j=0,optLen=field.options.length;j<optLen;j++){
option=field.options[j];
if(option.selected){
optValue="";
if(option.hasAttribute){
optValue=(option.hasAttribute("value")?
option.value:option.text);
}else{
optValue=(option.attributes["value"].specified?
option.value:option.text);
}
parts.push(encodeURIComponent(field.name)+"="+
encodeURIComponent(optValue));
}
}
}
break;
case undefined://預設處理
case "file"://預設處理
case "submit"://預設處理
case "reset"://預設處理
case "button"://不處理
break;
case "radio"://預設處理
case "checkbox":
if(!field.checked){
break;
}
default://預設處理,要求必須有name屬性
if(field.name.length){
parts.push(encodeURIComponent(field.name)+"="+
encodeURIComponent(field.value));
}
}
}
return parts.join("&");
}
相關推薦
前端經典面試題---Ajax篇
原生Ajax(相容) function ajax(options){ options = options||{}; var xhr = window.XMLHttpRequest ? (new XMLHttpRequest(
前端經典面試題---CSS篇
什麼是CSS盒模型? css盒子模型又稱框模型 (Box Model) ,包含了元素內容(content)、內邊距(padding)、邊框(border)、外邊距(margin)幾個要素。 標準模式下,一個塊的總寬度= width + margi
前端高頻面試題 CSS篇
語義 flex布局 ria nth 彈性盒子 direction 重新 結果 space 通過從網上看到的面經,總結的一些高頻的前端CSS面試題,有很多不會,於是找資料,並通過代碼實現,自己提供了一些參考答案。 目錄 1.怎樣會產生浮動? 2.如何清除浮動? 3.盒子模
前端經典面試題-代碼
color borde 格式 空格 存在 urn 默認 url convert 1、檢測變量類型。 // 此方法不僅可檢測出6種基本數據類型,還能檢測出Array、Function Object.prototype.toString.call(Array) // [‘Ob
新手小白必知的5道Web前端經典面試題
想成功就業web前端工程師,想要能高薪就業,那麼除了好的web前端技能以外,還得有好的面試技巧,如果提前就瞭解更多企業的面試要求及面試題目,那麼可以讓我們的面試成功的機率大大的提高,今天就給大家分享5道經典的web前端面試題,相信可以祝大家一臂之力。
2018Web前端經典面試題合集
javascript: JavaScript中如何檢測一個變數是一個String型別?請寫出函式實現 typeof(obj) === "string" typeof obj === "string" obj.constructor === String 請用js去除字串
2018前端經典面試題
1, html和xml有什麼區別 html是超文字標記語言 xml是可擴充套件標記語言 html語法寬鬆,xml語法嚴謹 html使用固有標記,xml沒有固有標記 html標籤預定義,xml標籤可擴充套件,可定義 html是用來顯示資料的,xml是用來描述和儲
2018年web前端經典面試題總結整理
對於很多同學來說,面試就是一個考驗,很多人技術上沒有任何問題,但是就是過補了面試那一關,那麼如何提升自己的面試機率呢?當然是瞭解一些面試題了,因為很多時候,一些我們忽略的小問題可能就是企業比較看重的,所以,今天給大家整理總結了一些面試題。希望可以對大家的面試有一定的幫助,可以讓大家更從容面對招聘者的考驗。
2018最新Web前端經典面試題及答案
javascript: JavaScript中如何檢測一個變數是一個String型別?請寫出函式實現 typeof(obj) === "string" typeof obj === "string" obj.constructor === String 請用js去除字
2018年web前端經典面試題總結,你能做對幾個?
對程式設計師小哥哥小姐姐來說,很多時候差的不是技術,卻過不了面試那一關。這時候我們就需要總結分析一下面試題目了,揣摩公司與hr的心理及需求,有時候我們忽略的小問題就是決定能不能拿到offer的重要因素,希望大家都可以找到自己心儀的工作,從容應對面試~ 1、webpack怎麼引入第三方的庫?
web前端開發面試題-基礎篇
最近更新時間:2017年7月19日09:50:06 IT行業發展迅速並且熱火朝天,每年都呈現人才緊缺現象,同時高薪崗位更是數不勝數,但要想過五關斬六將進入大廠,就需要謙虛學習基礎知識,不斷總結經驗。企業的競爭,本質是人才的競爭,優秀的人才進入優秀的企業,是符合社
前端經典面試題a++和++a 總結及自我解答(1)
1. 如果 a=1 ; b = a++ + (a++) + 1 + (++a) + (a++) + (++a) + a + (++a) = ? 並且這時候a =? 解答: 先說 a =? 首先求a , 有一個極簡單的方法,個人總結啊:
2018年web前端經典面試題及答案
javascript: JavaScript中如何檢測一個變數是一個String型別?請寫出函式實現方法1、function isString(obj){ return typeof(obj) === "string"? true: false; //
前端經典面試題: 從輸入URL到頁面載入發生了什麼?
從輸入URL到頁面載入發生了什麼總體來說分為以下幾個過程:DNS解析TCP連線傳送HTTP請求伺服器處理請求並返回HTTP報文瀏覽器解析渲染頁面連線結束具體過程1.DNS解析DNS解析的過程就是尋找哪臺機器上有你需要資源的過程。當你在瀏覽器中輸入一個地址時,例如www.bai
BAT及各大網際網路公司2014前端筆試面試題--JavaScript篇
function setcookie(name, value, days) { //給cookie增加一個時間變數 var exp = new Date(); exp.setTime(exp.getTime() + days * 24 * 60 * 60 * 100
2018 前端經典面試題
三列布局(左右固定;中間自適應)一、流體佈局<!DOCTYPE html> <html lang="en"> <head> <style> .left { float: left; height:
前端開發--面試題整理(JS篇)
狀態 state oda 通過 cli 命名空間 script push arguments 1.截取字符串abcdace的acealert(‘abcdace‘.substring(4)); 2.規避javascript多人開發函數重名問題命名空間封閉空間js模塊化mvc(
前端javaScript經典面試題
new 可能 spa 設置 沒有 sco test 問題 輸出結果 1.alert(1&&2),alert(1||0) alert(1&&2)的結果是2 只要“&&”前面是false,無論“&&”後
運維經典面試題之網路篇(一)
1、寫出12.23.34.0/29的掩碼 11111111.11111111.11111111.11111000 255.255.255.248 2、簡述衝突域與廣播域的區別 衝突域:基於osi的第一層物理層。 一個站點向另一個站
前端基礎面試題之CSS篇
最近出去面了一次試。去之前信心滿滿,去之後灰頭土臉,因為連最簡單的“css居中方式有多少種”、“說說js資料型別”這種入門問題竟然回答的支支吾吾,也怪不得面試官20分鐘就優雅的把我送了出來。 痛定思痛,總結了一些基礎面試題,望壯士你出門迎敵時,不要像我一樣尷尬…