原生js實現Ajax請求,包含get和post

来源:https://www.cnblogs.com/lanyueboyu/archive/2018/04/11/8793352.html
-Advertisement-
Play Games

現在web從伺服器請求數據,很多用到Ajax,不過都是用的JQuery封裝好的,之前做項目,由於無法引用JQuery,所以就只能用原生了,話不多說,請看代碼。 自己封裝Ajax,主要分三步: 第一步:創建需要的對象,這裡主要用到的是XMLHttpRequest,註意需要考慮早期的IE; 第二步:連接 ...


現在web從伺服器請求數據,很多用到Ajax,不過都是用的JQuery封裝好的,之前做項目,由於無法引用JQuery,所以就只能用原生了,話不多說,請看代碼。

 1 /*-------------------Ajax start--------------------*/
 2 
 3 function ajax(options) {
 4     options = options || {};
 5     options.type = (options.type || "GET").toUpperCase();
 6     options.dataType = options.dataType || "json";
 7     var params = formatParams(options.data);
 8     var xhr;
 9  
10     //創建 - 第一步
11     if (window.XMLHttpRequest) {
12       xhr = new XMLHttpRequest();
13     } else if(window.ActiveObject) {         //IE6及以下
14       xhr = new ActiveXObject('Microsoft.XMLHTTP');
15     }
16  
17     //連接 和 發送 - 第二步
18     if (options.type == "GET") {
19       xhr.open("GET", options.url + "?" + params, true);
20       xhr.send(null);
21     } else if (options.type == "POST") {
22       xhr.open("POST", options.url, true);
23       //設置表單提交時的內容類型
24       xhr.setRequestHeader("Content-Type", "application/x-www-form-urlencoded");
25       xhr.send(params);
26     }
27 
28      //接收 - 第三步
29     xhr.onreadystatechange = function () {
30       if (xhr.readyState == 4) {
31         var status = xhr.status;
32         if (status >= 200 && status < 300 || status == 304) {
33           options.success && options.success(xhr.responseText, xhr.responseXML);
34         } else {
35           options.error && options.error(status);
36         }
37       }
38     }
39   }
40 
41 //格式化參數
42 function formatParams(data){
43     var arr = [];
44     for (var name in data) {
45       arr.push(encodeURIComponent(name) + "=" + encodeURIComponent(data[name]));
46     }
47     arr.push(("v=" + Math.random()).replace(".",""));
48     return arr.join("&");
49 }
50 
51 /*-------------------Ajax end-------------------*/

自己封裝Ajax,主要分三步:

第一步:創建需要的對象,這裡主要用到的是XMLHttpRequest,註意需要考慮早期的IE;

第二步:連接和發送;

第三步:接收;

這裡為了格式化請求參數,封裝了一個formatParams(data)函數。


您的分享是我們最大的動力!

-Advertisement-
Play Games
更多相關文章
  • 在開發階段往Oracle資料庫中多個表格中導入了許多測試數據,倘若一張張表執行“truncate table tablename”語句顯得十分繁瑣。在PL/SQL中可以用代碼進行批量刪除表格數據。代碼如下: 在匹配表名的時候可以使用通配符,選擇想要刪除的表格名稱,這裡我選擇刪除名字以“D”開頭的所有 ...
  • 目的 管理優化程式統計信息 管理自動工作量資料檔案庫(AWR) 使用自動資料庫診斷監視器(ADDM) 說明和使用知道框架 設置預警閥值 使用伺服器生成的預警 使用自動任務 資料庫維護 通過複雜的Oracle DB基礎結構,可以方便地執行預先資料庫維護,主要包括以下要素: -每個Oracle DB中都 ...
  • Oracle->自定義調用AWR&ADDM 需求描述: 前面設定每天自動生成AWR用於提供前一天的資料庫狀態信息,但因資料庫和信息過多不利於直觀檢查。此次新增ADDM診斷。 ADDM診斷腳本分析: $ORACLE_HOME/rdbms/admin/addmrpt.sql--ADDM自動診斷資料庫的主 ...
  • Oracle->自動發送AWR報告 2016年9月21日 09:31 需求描述: 每日或定期手動使用AWR報告來檢查Oracle資料庫狀態不僅耗時也費力,需求使用腳本自動收集AWR報告。 分析方案: 收集AWR報告的腳本:$ORACLE_HOME/rdbms/admin/awrrpt.sql ->主 ...
  • 個人心得分享,不當之處還請指正。 Eclipse自帶的Android模擬器已經無力吐槽了,新手剛上手時或許配置完環境已經精疲力盡了,或許還沉浸在開發成功的喜悅當中,對AVD模擬器的運行情況關註不大,漸漸地就發現自帶的模擬器真心不好用。 (寫在前面)選擇Genymotion的理由 其實現在還沒發現好的 ...
  • 一個簡單的TextView實現了打字機的效果讓文字一個個顯示出來, 方法介紹: startShow 開始打字 使用: startShow(int typeStartTime,int typeTime) 使用: typeAndhide(View v,int duration) 打字結束後隱藏TextV ...
  • 前言: 看到大神們的寫的第三方控制項,比較好用,我們使用的時候直接是在gradle上加上代碼就可以使用了,現在到我們寫了一個第三方控制項,想要別人使用的時候也是直接在gradle加上相關的代碼就可以用了,我們該如何操作呢?答案很簡單,就是在JitPack網站上發佈我們的庫就可以 正文: 1.創建一個mo ...
  • 廢話少說,看東西 幀動畫的創建方式主要以下2種: * 用xml創建動畫; * 純Java代碼創建動畫; 本文內容主要關註 純java代碼創建幀動畫 的方式; * 用xml創建幀動畫:http://www.cnblogs.com/geaosu/p/8745151.html 純Java代碼創建動畫過程: ...
一周排行
    -Advertisement-
    Play Games
  • 示例項目結構 在 Visual Studio 中創建一個 WinForms 應用程式後,項目結構如下所示: MyWinFormsApp/ │ ├───Properties/ │ └───Settings.settings │ ├───bin/ │ ├───Debug/ │ └───Release/ ...
  • [STAThread] 特性用於需要與 COM 組件交互的應用程式,尤其是依賴單線程模型(如 Windows Forms 應用程式)的組件。在 STA 模式下,線程擁有自己的消息迴圈,這對於處理用戶界面和某些 COM 組件是必要的。 [STAThread] static void Main(stri ...
  • 在WinForm中使用全局異常捕獲處理 在WinForm應用程式中,全局異常捕獲是確保程式穩定性的關鍵。通過在Program類的Main方法中設置全局異常處理,可以有效地捕獲並處理未預見的異常,從而避免程式崩潰。 註冊全局異常事件 [STAThread] static void Main() { / ...
  • 前言 給大家推薦一款開源的 Winform 控制項庫,可以幫助我們開發更加美觀、漂亮的 WinForm 界面。 項目介紹 SunnyUI.NET 是一個基於 .NET Framework 4.0+、.NET 6、.NET 7 和 .NET 8 的 WinForm 開源控制項庫,同時也提供了工具類庫、擴展 ...
  • 說明 該文章是屬於OverallAuth2.0系列文章,每周更新一篇該系列文章(從0到1完成系統開發)。 該系統文章,我會儘量說的非常詳細,做到不管新手、老手都能看懂。 說明:OverallAuth2.0 是一個簡單、易懂、功能強大的許可權+可視化流程管理系統。 有興趣的朋友,請關註我吧(*^▽^*) ...
  • 一、下載安裝 1.下載git 必須先下載並安裝git,再TortoiseGit下載安裝 git安裝參考教程:https://blog.csdn.net/mukes/article/details/115693833 2.TortoiseGit下載與安裝 TortoiseGit,Git客戶端,32/6 ...
  • 前言 在項目開發過程中,理解數據結構和演算法如同掌握蓋房子的秘訣。演算法不僅能幫助我們編寫高效、優質的代碼,還能解決項目中遇到的各種難題。 給大家推薦一個支持C#的開源免費、新手友好的數據結構與演算法入門教程:Hello演算法。 項目介紹 《Hello Algo》是一本開源免費、新手友好的數據結構與演算法入門 ...
  • 1.生成單個Proto.bat內容 @rem Copyright 2016, Google Inc. @rem All rights reserved. @rem @rem Redistribution and use in source and binary forms, with or with ...
  • 一:背景 1. 講故事 前段時間有位朋友找到我,說他的窗體程式在客戶這邊出現了卡死,讓我幫忙看下怎麼回事?dump也生成了,既然有dump了那就上 windbg 分析吧。 二:WinDbg 分析 1. 為什麼會卡死 窗體程式的卡死,入口門檻很低,後續往下分析就不一定了,不管怎麼說先用 !clrsta ...
  • 前言 人工智慧時代,人臉識別技術已成為安全驗證、身份識別和用戶交互的關鍵工具。 給大家推薦一款.NET 開源提供了強大的人臉識別 API,工具不僅易於集成,還具備高效處理能力。 本文將介紹一款如何利用這些API,為我們的項目添加智能識別的亮點。 項目介紹 GitHub 上擁有 1.2k 星標的 C# ...