天天看點

js 封裝ajax方法嗎,類似jQuery的原生JS封裝的ajax方法

一,前言:

前文,我們介紹了ajax的原理和核心内容,主要講的是ajax從前端到後端的資料傳遞的整個過程。

真正的核心就是這段代碼:

var xhr = new XMLHTTPRequest();

xhr.open("method", "url", "async");

xhr.send(null);

xhr.onreadystatechange = function(){

if(xhr.readystate == 4){

if(xhr.status == 200){

console.log(xhr.responseText)

}

}

}

一個對象(XMLHTTPRequest對象)、

兩個方法(包括open("method", "url", "async")方法和send(content)方法)、

三個屬性(readystate表示目前請求狀态,status表示http請求狀态碼,responseText表示伺服器回報内容),

當然還有一個事件——onreadystatechange ,是在readystate狀态改變時觸發的事件。具體的内容請點選連結Ajax工作原理。

二,正文:

先來看看jQuery中Ajax方法的使用:

$.ajax({

type: "GET",   //通路伺服器的方式,GET/POST

url: "test.json",   //url表示通路的伺服器位址

data: {username: "",

content: ""},     //data表示傳遞到背景的資料,使用鍵值對形式傳遞

async: true,   //true表示異步,false表示同步

success: function(data){

console.log(data)

},

error: function(err){

console.log(err)

}

});

那麼我們想要封裝成類似JQuery的形式,供調用,怎麼辦呢?

function $Ajax(opt){

opt = opt || {};

opt.type = opt.type || "post";

opt.url = opt.url || "";

opt.async = opt.async || true;

opt.data = opt.data || null;

opt.success = opt.success || function(){};

opt.error = opt.error || function(){};

var xhr = new XMLHTTPRequest();

var params = {};

for(var key in opt.data){

params.push(key + "=" + opt.data[key]);

}

var sendData = params.join("&");

if(opt.type.toUpperCase() == "GET"){

xhr.open(opt.type, opt.url + "?" + sendData, opt.async);

xhr.send(null);

}else{

xhr.open(opt.type, opt.url, opt.async);

xhr.setRequestHeader("Content-type", "application/x-www-form-urlencoded; charset=utf-8");

xhr.send(sendData);

}

xhr.onreadystatechange = function(){

if(xhr.readystate == 4){

if(xhr.status == 200){

opt.success && opt.success(xhr.responseText);

}else{

opt.error && xhr.error(xhr.status);

}

}

}

}

已經封裝好了,接下來就是調用了,就像jQuery那樣使用就行:

$Ajax({

type: "GET",

url: "test.json",

data: {username: "", content: ""},

async: true,

success: function(responseText){

console.log(responseText)

},

error: function(status){

console.log(status)

}

});

二,結語:

已經很晚了,沒有進行測試,也沒有詳細進行注釋,有時間再完善吧。

用jQuery基于原生js封裝的輪播

我發現輪播在很多網站裡面都用到過,一個絢麗的輪播可以為網頁增色不少,最近閑來無事,也用原生js封裝了一個輪播,可能不像網上的插件那麼炫,但是也有用心去做.主要用了閉包的思想.需要傳遞的參數有:圖檔位址 ...

使用原生JS封裝一個ajax

function ajax(data){ //第一步,建立XHR對象 var xhr = null; if(window.XMLHttpRequest){ xhr = new XMLHttpReque ...

原生JS封裝ajax方法

http://blog.sucaijiayuan.com/article/89 jquery架構的ajax方法固然好用,但是假如某天我們的項目不能引入jquery或項目需求很簡單,沒有很多互動功能,隻 ...

原生JS封裝Ajax插件(同域&&jsonp跨域)

抛出一個問題,其實所謂的熟悉原生JS,怎樣的程度才是熟悉呢? 最近都在做原生JS熟悉的練習... 用原生Js封裝了一個Ajax插件,引入一般的項目,傳傳資料,感覺還是可行的...簡單說說思路,如有不正 ...

通過遊戲認識 --- JQuery與原生JS的差異

前言 jQuery是一個快速.簡潔的JavaScript架構,是繼Prototype之後又一個優秀的JavaScript代碼庫( 或JavaScript架構).jQuery設計的宗旨是“write ...

ThinkPHP 中使用 IS_AJAX 判斷原生 JS 中的 Ajax 出現問題

問題: 在 ThinkPHP 中使用原生 js 發起 Ajax 請求的時候.在控制器無法使用 IS_AJAX 進行判斷.而使用 jQuery 中的 ajax 是沒有問題的. 在ThinkPHP中.有一 ...

原生js封裝十字參考線插件(一)

需求來源: 拓撲圖之機房平面圖,顯示機房長寬比例尺,房間内标注各種裝置間距不易實作,特在機房平面圖上層加一個十字參考線 橫豎兩條線垂直,在滑鼠指針處交叉,顯示滑鼠指針坐标(相對機房平面圖的坐标,不是相 ...

JavaWeb_Ajax通過JQuery和原生js異步傳輸資料

菜鳥教程 傳送門 AJAX 優點:在不重新加載整個頁面的情況下,可以與伺服器交換資料并更新部分網頁内容 XMLHttpRequest 對象 傳送門 (一) [JQuery]定時發送ajax請求 (二) ...

原生JS封裝簡單動畫效果

原生JS封裝簡單動畫效果 一緻使用各種插件,有時候對原生JS陌生了起來,是以決定封裝一個簡單動畫效果,熟悉JS原生代碼 function animate(obj, target,num){ if(ob ...

随機推薦

Swift泛型協定的N種用法

They said "you should learn a new language every year," so I  learned Swift. Now  I  learn ...

iOS 輕量級的資料庫leveldb

輕量級的資料庫leveldb https://github.com/google/leveldb 一:在iOS下編譯leveldb 終端: 1: git clone https://github.co ...

hdu----(2222)Keywords Search(trie樹)

Keywords Search Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 65536/32768 K (Java/Others)T ...

傅裡葉變換:MP3、JPEG和Siri背後的數學

九年前,當我還坐在學校的實體數學課的課堂裡時,我的老師為我們講授了一種新方法,給我留下了深刻映像.我認為,毫不誇張地說,這是對數學理論發現最廣泛的應用.應用的領域包括:量子實體.射電天文學.MP3和J ...

Android布局中的空格以及占一個漢字寬度的空格的實作

在Android布局中進行使用到空格,以便實作文字的對齊.那麼在Android中如何表示一個空格呢? 空格:  窄空格:  一個漢字寬度的空格:   [用兩個空格(  )占一個漢字的寬度時,兩個空格比 ...

window.location.href("url") 無法在chrome和Firefoxz中使用

今天在js代碼中加了一句window.location.href(‘url’)希望實作頁面的跳轉,IE中可以正常使用,但是Firefox卻提示window.location is not a func ...

[轉]OpenShift 叢集搭建指南

轉自:http://www.cnblogs.com/zhangning/p/7251810.html OpenShift 叢集搭建指南 v1.0 搭建Hyper-v虛拟機或實體機 配置實體機靜态IP, ...

Linux下的計劃任務at,batch,crontab

0x00前言: 繼上次的windows計劃任務後,拓展研究下linux下的計劃任務,能夠執行計劃任務有3個指令at,batch,crontab 所謂的計劃任務就是定時啟動某個程式,可以是一組shell ...

docker 支援ipv6 (核心要點是ndp需要把docker内的ip全部加入到ndplist中來)

IPv6 with Docker Estimated reading time: 10 minutes The information in this section explains IPv6 wi ...

apt-get 使用指南

# apt-get update——在修改/etc/apt/sources.list或者/etc/apt/preferences之後運作該指令.此外您需要定期運作這一指令以確定您的軟體包清單是最新的. ...