摘要:使用過(guò)的同學(xué),應(yīng)該對(duì)事件綁定方法有一定的了解。實(shí)現(xiàn)方式以下為個(gè)人類庫(kù)中實(shí)現(xiàn)方式。代碼中使用到一個(gè)基礎(chǔ)方法對(duì)象,該對(duì)象為的基礎(chǔ)類。如果想了解更多,可以通過(guò)點(diǎn)擊進(jìn)入查看原碼。
使用過(guò)jQuery的同學(xué),應(yīng)該對(duì)事件綁定方法ajax有一定的了解。 在個(gè)人類庫(kù)jTool 中實(shí)現(xiàn)了這個(gè)方法,這里就來(lái)細(xì)說(shuō)下原生實(shí)現(xiàn)方式。實(shí)現(xiàn)方式
以下為個(gè)人類庫(kù)jTool 中 Ajax 實(shí)現(xiàn)方式。
代碼中使用到一個(gè)基礎(chǔ)方法對(duì)象utilities ,該對(duì)象為jTool 的基礎(chǔ)類。 如果想了解更多,可以通過(guò)點(diǎn)擊進(jìn)入查看原碼。
/* * ajax * type === GET: data格式 name=baukh&age=29 * type === POST: data格式 { name: "baukh", age:29 } * 與 jquery 不同的是,[success, error, complete]返回的第二個(gè)參數(shù), 并不是返回錯(cuò)誤信息, 而是錯(cuò)誤碼 * */ var extend = require("./extend"); var utilities = require("./utilities"); function ajax(options) { var defaults = { url: null,// 請(qǐng)求地址 type: "GET",// 請(qǐng)求類型 data: null,// 傳遞數(shù)據(jù) headers: {},// 請(qǐng)求頭信息 async: true,// 是否異步執(zhí)行 beforeSend: utilities.noop,// 請(qǐng)求發(fā)送前執(zhí)行事件 complete: utilities.noop,// 請(qǐng)求發(fā)送后執(zhí)行事件 success: utilities.noop,// 請(qǐng)求成功后執(zhí)行事件 error: utilities.noop// 請(qǐng)求失敗后執(zhí)行事件 }; options = extend(defaults, options); if (!options.url) { utilities.error("jTool ajax: url不能為空"); return; } var xhr = new XMLHttpRequest(); var formData = ""; if (utilities.type(options.data) === "object") { utilities.each(options.data, function (key, value) { if(formData !== "") { formData += "&"; } formData += key + "=" + value; }); }else { formData = options.data; } if(options.type === "GET" && formData) { options.url = options.url + (options.url.indexOf("?") === -1 ? "?" : "&") + formData; formData = null; } xhr.open(options.type, options.url, options.async); for (var key in options.headers) { xhr.setRequestHeader(key, options.headers[key]); } // xhr.setRequestHeader("Content-Type","application/x-www-form-urlencoded"); // 執(zhí)行發(fā)送前事件 options.beforeSend(xhr); // 監(jiān)聽(tīng)onload并執(zhí)行完成事件 xhr.onload = function() { // jquery complete(XHR, TS) options.complete(xhr, xhr.status); }; // 監(jiān)聽(tīng)onreadystatechange并執(zhí)行成功失敗事件 xhr.onreadystatechange = function() { if (xhr.readyState !== 4) { return; } if (xhr.status >= 200 && xhr.status < 300 || xhr.status === 304) { // jquery success(XHR, TS) options.success(xhr.response, xhr.status); } else { // jquery error(XHR, TS, statusText) options.error(xhr, xhr.status, xhr.statusText); } }; xhr.send(formData); } function post(url, data, callback) { ajax({ url: url, type: "POST", data: data, success: callback }); } function get(url, data, callback) { ajax({ url: url, type: "GET", data: data, success: callback }); } module.exports = { ajax: ajax, post: post, get: get };
隨筆一行
這是前端最好的時(shí)代, 這也是前端最壞的時(shí)代。 眾多前端框架滿天飛,隨著 jQuery 在前端行業(yè)的慢慢弱化,總是會(huì)有一種斯人遠(yuǎn)去,何者慰籍的感覺(jué)。互勉吧,各位。
另推薦個(gè)表格組件gridManager
文章版權(quán)歸作者所有,未經(jīng)允許請(qǐng)勿轉(zhuǎn)載,若此文章存在違規(guī)行為,您可以聯(lián)系管理員刪除。
轉(zhuǎn)載請(qǐng)注明本文地址:http://specialneedsforspecialkids.com/yun/109789.html
摘要:原生與對(duì)的實(shí)現(xiàn)一定義里這么解釋異步的和。二原生實(shí)現(xiàn)所有現(xiàn)代瀏覽器以及均內(nèi)建對(duì)象。一般是正常未找到頁(yè)面,一般是錯(cuò)誤,或者后臺(tái)沒(méi)有創(chuàng)建相應(yīng)的內(nèi)部服務(wù)錯(cuò)誤,多為后臺(tái)錯(cuò)誤。基本上通過(guò)發(fā)送的數(shù)據(jù)及傳回的數(shù)據(jù)就能定位問(wèn)題所在了。 原生JS與jQuery對(duì)AJAX的實(shí)現(xiàn) 一、定義 W3C里這么解釋AJAX: AJAX = Asynchronous JavaScript and XML(異步的 Jav...
摘要:在接收響應(yīng)期間持續(xù)不斷地觸發(fā)。在請(qǐng)求發(fā)生錯(cuò)誤時(shí)觸發(fā)。在通信完成或者觸發(fā)或事件后觸發(fā)。已經(jīng)接收到部分響應(yīng)數(shù)據(jù)。基于標(biāo)準(zhǔn)被廣泛支持。破壞程序的異常處理機(jī)制。 原文(我的GitHub):https://github.com/liangfengbo/frontend-ability/issues/1 學(xué)習(xí)大綱 理解Ajax的工作原理 Ajax核心-XMLHttpRequest對(duì)象 封裝Aja...
摘要:希望幫助更多的前端愛(ài)好者學(xué)習(xí)。前端開發(fā)者指南作者科迪林黎,由前端大師傾情贊助。翻譯最佳實(shí)踐譯者張捷滬江前端開發(fā)工程師當(dāng)你問(wèn)起有關(guān)與時(shí),老司機(jī)們首先就會(huì)告訴你其實(shí)是個(gè)沒(méi)有網(wǎng)絡(luò)請(qǐng)求功能的庫(kù)。 前端基礎(chǔ)面試題(JS部分) 前端基礎(chǔ)面試題(JS部分) 學(xué)習(xí) React.js 比你想象的要簡(jiǎn)單 原文地址:Learning React.js is easier than you think 原文作...
摘要:當(dāng)請(qǐng)求完成后注冊(cè)一個(gè)回調(diào)函數(shù)。該請(qǐng)求是否觸發(fā)全局處理事件如等,請(qǐng)求發(fā)送前的回調(diào)函數(shù),用來(lái)修改請(qǐng)求發(fā)送前,此功能可用來(lái)設(shè)置自定義頭信息,在函數(shù)中返回將取消這個(gè)請(qǐng)求。例如,為請(qǐng)求指定一個(gè)回調(diào)函數(shù)名。即改變回調(diào)函數(shù)的,默認(rèn)就是傳入的整個(gè)對(duì)象。 Ajax Ajax 全稱是 asynchronous javascript and xml,并不是新的編程語(yǔ)言,可以說(shuō)是已有技術(shù)的組合,主要用來(lái)實(shí)現(xiàn)客...
摘要:接收響應(yīng)當(dāng)請(qǐng)求發(fā)送到服務(wù)器端,收到響應(yīng)后,響應(yīng)的數(shù)據(jù)會(huì)自動(dòng)填充對(duì)象的屬性。一般而已狀態(tài)代碼為作為成功的標(biāo)志。必要時(shí),可以將查詢字符串參數(shù)追加到的末尾,以便提交給服務(wù)器。后端實(shí)現(xiàn)可以自學(xué)一點(diǎn)后端知識(shí),便于學(xué)習(xí)。 前端學(xué)習(xí):教程&開發(fā)模塊化/規(guī)范化/工程化/優(yōu)化&工具/調(diào)試&值得關(guān)注的博客/Git&面試-前端資源匯總 歡迎提issues斧正:Ajax JavaScript-Ajax&&no...
閱讀 2609·2021-11-18 10:02
閱讀 2278·2021-09-30 09:47
閱讀 1745·2021-09-27 14:01
閱讀 3109·2021-08-16 11:00
閱讀 3163·2019-08-30 11:06
閱讀 2391·2019-08-29 17:29
閱讀 1531·2019-08-29 13:19
閱讀 445·2019-08-26 13:54