原生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
  • 移動開發(一):使用.NET MAUI開發第一個安卓APP 對於工作多年的C#程式員來說,近來想嘗試開發一款安卓APP,考慮了很久最終選擇使用.NET MAUI這個微軟官方的框架來嘗試體驗開發安卓APP,畢竟是使用Visual Studio開發工具,使用起來也比較的順手,結合微軟官方的教程進行了安卓 ...
  • 前言 QuestPDF 是一個開源 .NET 庫,用於生成 PDF 文檔。使用了C# Fluent API方式可簡化開發、減少錯誤並提高工作效率。利用它可以輕鬆生成 PDF 報告、發票、導出文件等。 項目介紹 QuestPDF 是一個革命性的開源 .NET 庫,它徹底改變了我們生成 PDF 文檔的方 ...
  • 項目地址 項目後端地址: https://github.com/ZyPLJ/ZYTteeHole 項目前端頁面地址: ZyPLJ/TreeHoleVue (github.com) https://github.com/ZyPLJ/TreeHoleVue 目前項目測試訪問地址: http://tree ...
  • 話不多說,直接開乾 一.下載 1.官方鏈接下載: https://www.microsoft.com/zh-cn/sql-server/sql-server-downloads 2.在下載目錄中找到下麵這個小的安裝包 SQL2022-SSEI-Dev.exe,運行開始下載SQL server; 二. ...
  • 前言 隨著物聯網(IoT)技術的迅猛發展,MQTT(消息隊列遙測傳輸)協議憑藉其輕量級和高效性,已成為眾多物聯網應用的首選通信標準。 MQTTnet 作為一個高性能的 .NET 開源庫,為 .NET 平臺上的 MQTT 客戶端與伺服器開發提供了強大的支持。 本文將全面介紹 MQTTnet 的核心功能 ...
  • Serilog支持多種接收器用於日誌存儲,增強器用於添加屬性,LogContext管理動態屬性,支持多種輸出格式包括純文本、JSON及ExpressionTemplate。還提供了自定義格式化選項,適用於不同需求。 ...
  • 目錄簡介獲取 HTML 文檔解析 HTML 文檔測試參考文章 簡介 動態內容網站使用 JavaScript 腳本動態檢索和渲染數據,爬取信息時需要模擬瀏覽器行為,否則獲取到的源碼基本是空的。 本文使用的爬取步驟如下: 使用 Selenium 獲取渲染後的 HTML 文檔 使用 HtmlAgility ...
  • 1.前言 什麼是熱更新 游戲或者軟體更新時,無需重新下載客戶端進行安裝,而是在應用程式啟動的情況下,在內部進行資源或者代碼更新 Unity目前常用熱更新解決方案 HybridCLR,Xlua,ILRuntime等 Unity目前常用資源管理解決方案 AssetBundles,Addressable, ...
  • 本文章主要是在C# ASP.NET Core Web API框架實現向手機發送驗證碼簡訊功能。這裡我選擇是一個互億無線簡訊驗證碼平臺,其實像阿裡雲,騰訊雲上面也可以。 首先我們先去 互億無線 https://www.ihuyi.com/api/sms.html 去註冊一個賬號 註冊完成賬號後,它會送 ...
  • 通過以下方式可以高效,並保證數據同步的可靠性 1.API設計 使用RESTful設計,確保API端點明確,並使用適當的HTTP方法(如POST用於創建,PUT用於更新)。 設計清晰的請求和響應模型,以確保客戶端能夠理解預期格式。 2.數據驗證 在伺服器端進行嚴格的數據驗證,確保接收到的數據符合預期格 ...