摘要:工作之余簡單封裝了的請求,但是工作中還是用,,內(nèi)部封裝好了模塊笑。代碼解析參數(shù)創(chuàng)建高級瀏覽器和以上連接發(fā)送請求頭發(fā)送接收完成清除定時器成功超時超時了終止轉(zhuǎn)
工作之余簡單封裝了ajax的請求,但是工作中還是用jquery,axios,angular內(nèi)部封裝好了http模塊(笑)。
ajax一般分為簡單的四部:
創(chuàng)建ajax對象(這里兼容ie的話要做一下處理)
連接,即請求對象的open方法(get和post還有點不同,get參數(shù)要放在url后面,post要設(shè)置請求頭)
發(fā)送,即請求對象的send函數(shù)(post參數(shù)則放在send里面)
接收,在onreadystatechange(存儲函數(shù)或函數(shù)名,每當readyState屬性改變時,就會調(diào)用該函數(shù)。)函數(shù)里面處理。
還可以加上超時這些
onreadystatechange分析要先判斷readyState的狀態(tài)(有四個狀態(tài))
①: 0,請求未初始化;
②: 1,服務(wù)器連接已建立;
③: 2,請求已接收;
④: 3,請求處理中;
⑤: 4,請求已完成,且響應(yīng)已就緒
當readyState等于4時,你又要判斷status的狀態(tài)
請求成功時status狀態(tài) 200-300(不包括300) ,還有304(是緩存)(具體狀態(tài)可以去參考文檔)
在成功(失敗)的回掉函數(shù)里面將xhr.responseText的值返回出去。
代碼"use strict"; var $ = {}; $.ajax = ajax; function ajax(options) { // 解析參數(shù) options = options || {}; if (!options.url) return; options.type = options.type || "get"; options.timeout = options.timeout || 0; // 1 創(chuàng)建ajax if (window.XMLHttpRequest) { // 高級瀏覽器和ie7以上 var xhr = new XMLHttpRequest(); } else { //ie6,7,8 var xhr = new ActiveXObject("Microsoft.XMLHTTP"); } // 2 連接 var str = jsonToUrl(options.data); if (options.type === "get") { xhr.open("get", `${options.url}?${str}`, true); // 3 發(fā)送 xhr.send(); } else { xhr.open("post", options.url, true); // 請求頭 xhr.setRequestHeader("Content-Type","application/x-www-form-urlencoded"); // 3 發(fā)送 xhr.send(); } // 接收 xhr.onreadystatechange = function() { // 完成 if (xhr.readyState === 4) { // 清除定時器 clearTimeout(timer); if (xhr.status >= 200 && xhr.status < 300 || xhr.status == 304) { // 成功 options.success && options.success(xhr.responseText); } else { options.error && options.error( xhr.status ); } } }; // 超時 if (options.timeout) { var timer = setTimeout(function(){ alert("超時了"); xhr.abort(); // 終止 },options.timeout); } } // json轉(zhuǎn)url function jsonToUrl(json) { var arr = []; json.t = Math.random(); for(var name in json) { arr.push(name + "=" + encodeURIComponent(json[name])); } return arr.join("&"); }
文章版權(quán)歸作者所有,未經(jīng)允許請勿轉(zhuǎn)載,若此文章存在違規(guī)行為,您可以聯(lián)系管理員刪除。
轉(zhuǎn)載請注明本文地址:http://m.specialneedsforspecialkids.com/yun/107044.html
摘要:回調(diào)使用封裝入門回調(diào)是啥看這里回調(diào)是什么方應(yīng)杭知乎是一種特殊的函數(shù),這個函數(shù)被作為參數(shù)傳給另一個函數(shù)去調(diào)用。 回調(diào)、使用Promise封裝ajax()、Promise入門 1 回調(diào)是啥 call a functioncall a function back callback 看這里:Callback(回調(diào))是什么?---方應(yīng)杭知乎 callback 是一種特殊的函數(shù),這個函數(shù)被作為參數(shù)...
摘要:封裝和跨域知識使用還是是通過參數(shù)傳遞到當前腳本的變量數(shù)組。對所發(fā)送信息的數(shù)量也有限制。請求成功時觸發(fā),。允許一個域上的網(wǎng)絡(luò)應(yīng)用向另一個域提交跨域請求。 ajax封裝和跨域知識 ajax 使用get還是post $_GET 是通過 URL 參數(shù)傳遞到當前腳本的變量數(shù)組。 $_POST 是通過 HTTP POST 傳遞到當前腳本的變量數(shù)組。 何時使用 GET? 通過 GET 方法從表單...
摘要:本次二次封裝,參考可以添加中間件處理數(shù)據(jù),返回對象,減少回調(diào),寫更加簡潔優(yōu)雅。痛點但是在項目中使用它還是有一些痛點的就是現(xiàn)在基本所有項目的返回的數(shù)據(jù)也是進行了二次封裝,加入了后臺在處理業(yè)務(wù)邏輯時的信息。 前言 在我們前端處理數(shù)據(jù)的時候免不了要 ajax 與后臺通信, ajax 是通過 XMLHttpRequest 對象與服務(wù)器進行通信的, jquery 在 XMLHttpReaque...
摘要:今天給大家寫一篇關(guān)于在中的應(yīng)用及封裝,有些同學可能會有疑問,因為熟悉的都知道,中有和是專門用于交互的,那么豈不是多此一舉嗎其實不然,有的優(yōu)勢,并且小編本身對有著特殊的感情,今天就給大家詳細詳解在中的應(yīng)用。 今天給大家寫一篇關(guān)于ajax在vue中的應(yīng)用及封裝,有些同學可能會有疑問,因為熟悉vue的都知道,vue中有vue-resource和axios是專門用于http交互的,那么ajax...
摘要:今天給大家寫一篇關(guān)于在中的應(yīng)用及封裝,有些同學可能會有疑問,因為熟悉的都知道,中有和是專門用于交互的,那么豈不是多此一舉嗎其實不然,有的優(yōu)勢,并且小編本身對有著特殊的感情,今天就給大家詳細詳解在中的應(yīng)用。 今天給大家寫一篇關(guān)于ajax在vue中的應(yīng)用及封裝,有些同學可能會有疑問,因為熟悉vue的都知道,vue中有vue-resource和axios是專門用于http交互的,那么ajax...
閱讀 2508·2021-11-25 09:43
閱讀 2620·2021-11-16 11:50
閱讀 3302·2021-10-09 09:44
閱讀 3216·2021-09-26 09:55
閱讀 2850·2019-08-30 13:50
閱讀 1035·2019-08-29 13:24
閱讀 2099·2019-08-26 11:44
閱讀 2807·2019-08-26 11:37