国产xxxx99真实实拍_久久不雅视频_高清韩国a级特黄毛片_嗯老师别我我受不了了小说

資訊專欄INFORMATION COLUMN

ajax簡單封裝

caoym / 2031人閱讀

摘要:工作之余簡單封裝了的請求,但是工作中還是用,,內(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

相關(guān)文章

  • 回調(diào)、使用Promise封裝ajax()、Promise入門

    摘要:回調(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ù)...

    godlong_X 評論0 收藏0
  • ajax封裝和跨域知識

    摘要:封裝和跨域知識使用還是是通過參數(shù)傳遞到當前腳本的變量數(shù)組。對所發(fā)送信息的數(shù)量也有限制。請求成功時觸發(fā),。允許一個域上的網(wǎng)絡(luò)應(yīng)用向另一個域提交跨域請求。 ajax封裝和跨域知識 ajax 使用get還是post $_GET 是通過 URL 參數(shù)傳遞到當前腳本的變量數(shù)組。 $_POST 是通過 HTTP POST 傳遞到當前腳本的變量數(shù)組。 何時使用 GET? 通過 GET 方法從表單...

    Shihira 評論0 收藏0
  • 二次封裝 query ajax 辦法

    摘要:本次二次封裝,參考可以添加中間件處理數(shù)據(jù),返回對象,減少回調(diào),寫更加簡潔優(yōu)雅。痛點但是在項目中使用它還是有一些痛點的就是現(xiàn)在基本所有項目的返回的數(shù)據(jù)也是進行了二次封裝,加入了后臺在處理業(yè)務(wù)邏輯時的信息。 前言 在我們前端處理數(shù)據(jù)的時候免不了要 ajax 與后臺通信, ajax 是通過 XMLHttpRequest 對象與服務(wù)器進行通信的, jquery 在 XMLHttpReaque...

    zr_hebo 評論0 收藏0
  • Ajax在vue中的封裝及使用

    摘要:今天給大家寫一篇關(guān)于在中的應(yīng)用及封裝,有些同學可能會有疑問,因為熟悉的都知道,中有和是專門用于交互的,那么豈不是多此一舉嗎其實不然,有的優(yōu)勢,并且小編本身對有著特殊的感情,今天就給大家詳細詳解在中的應(yīng)用。 今天給大家寫一篇關(guān)于ajax在vue中的應(yīng)用及封裝,有些同學可能會有疑問,因為熟悉vue的都知道,vue中有vue-resource和axios是專門用于http交互的,那么ajax...

    godruoyi 評論0 收藏0
  • Ajax在vue中的封裝及使用

    摘要:今天給大家寫一篇關(guān)于在中的應(yīng)用及封裝,有些同學可能會有疑問,因為熟悉的都知道,中有和是專門用于交互的,那么豈不是多此一舉嗎其實不然,有的優(yōu)勢,并且小編本身對有著特殊的感情,今天就給大家詳細詳解在中的應(yīng)用。 今天給大家寫一篇關(guān)于ajax在vue中的應(yīng)用及封裝,有些同學可能會有疑問,因為熟悉vue的都知道,vue中有vue-resource和axios是專門用于http交互的,那么ajax...

    pingink 評論0 收藏0

發(fā)表評論

0條評論

最新活動
閱讀需要支付1元查看
<