ajax 和 mock 數據

来源:https://www.cnblogs.com/evenyao/archive/2018/08/01/9404656.html
-Advertisement-
Play Games

ajax ajax是一種技術方案,但並不是一種新技術。它依賴的是現有的CSS/HTML/Javascript,而其中最核心的依賴是瀏覽器提供的XMLHttpRequest對象,是這個對象使得瀏覽器可以發出HTTP請求與接收HTTP響應。 實現在頁面不刷新的情況下和服務端進行數據交互。 作用:傳統的網 ...


ajax

ajax是一種技術方案,但並不是一種新技術。它依賴的是現有的CSS/HTML/Javascript,而其中最核心的依賴是瀏覽器提供的XMLHttpRequest對象,是這個對象使得瀏覽器可以發出HTTP請求與接收HTTP響應。 實現在頁面不刷新的情況下和服務端進行數據交互。

作用:
傳統的網頁(不使用ajax)。如果需要更新內容,必須重新載入整個網頁,而通過使用ajax可以在後臺與伺服器進行少量數據交換,可以使網頁實現非同步更新。這意味著可以在不重新載入整個網頁的情況下,對網頁的某部分進行更新。

實現方式

  • XMLHttpRequest對象
  • fetch(相容性不如XMLHttpRequest)
    相容性查詢

範例

GET 範例

//非同步GET
var xhr = new XMLHttpRequest()
xhr.open('GET','/login?username=evenyao&password=123',true)  //get類型 數據需要拼接成url放到?後面
xhr.send()

console.log('readyState:',xhr.readyState)
xhr.addEventListener('readystatechange',function(){    //或者使用xhr.onload = function()
  //查看readyState狀態
  console.log('readyState:',xhr.readyState)
})
xhr.addEventListener('load',function(){
  console.log(xhr.status)
  if((xhr.status >= 200 && xhr.status < 300)|| xhr.status === 304){
    var data = xhr.responseText
    console.log(data)
  }else{
    console.log('error')
  }
})
xhr.onerror = function(){
  console.log('error')
}


//等同代碼
var xhr = new XMLHttpRequest()
xhr.open('GET','/login?username=evenyao&password=123',true)
xhr.send()
xhr.onreadystatechange = function(){
  if(xhr.readyState === 4){
    if((xhr.status >= 200 && xhr.status < 300)|| xhr.status === 304){
      console.log(xhr.responseText)
    }else{
      console.log('error')
    }
  }
}
xhr.onerror = function(){
  console.log('error')
}

 

POST 範例

//非同步POST
var xhr = new XMLHttpRequest()
xhr.open('POST','/login',true)  //post拼接數據放掉send裡面
//post拼接數據放掉send裡面
xhr.send(makeUrl({
  username:'evenyao',
  password:'123'
}))

xhr.addEventListener('load',function(){
  console.log(xhr.status)
  if((xhr.status >= 200 && xhr.status < 300)|| xhr.status === 304){
    var data = xhr.responseText
    console.log(data)
  }else{
    console.log('error')
  }
})
xhr.onerror = function(){
  console.log('error')
}

//makeUrl拼接函數
function makeUrl(obj){
  var arr = []
  for(var key in obj){
    arr.push(key + '=' + obj[key])
  }
  return arr.join('&')
}

 

封裝 ajax

//封裝 ajax
function ajax(opts){
  var url = opts.url
  //如果有類型就使用用戶輸入的類型; 如果沒有,預設為後面的
  var type = opts.type || 'GET'
  var dataType = opts.dataType || 'json'
  var onsuccess = opts.onsuccess || function(){}
  var onerror = opts.onerror || function(){}
  var data = opts.data || {}

  //data序列化
  var dataStr = []
  for(var key in data){
    dataStr.push(key + '=' + data[key])
  }
  dataStr = dataStr.join('&')

  //GET類型 使用url拼接
  if(type === 'GET'){
    url += '?' + dataStr
  }

  //XMLHttpRequest對象創建
  var xhr = new XMLHttpRequest()
  xhr.open(type,url,true)
  xhr.onload = function(){
    if((xhr.status >= 200 && xhr.status < 300) || xhr.status == 304){
      //成功
      //如果返回的數據類型是json,就解析成json格式
      if(dataType === 'json'){
        onsuccess(JSON.parse(xhr.responseText))
      }else{
        onsuccess(xhr.responseText)
      }
    }else{
      onerror()
    }
  }
  //如果斷網,也會執行onerror()
  xhr.onerror = onerror()

  //POST類型
  if(type === 'POST'){
    xhr.send(dataStr)
  }else{
    xhr.send()
  }
}

ajax({
  url:'http://xxx',
  type: 'POST',
  data: {
    city: '北京'
  },
  onsuccess: function(ret){
    console.log(ret)
    render(ret)
  },
  onerror: function(){
    console.log('伺服器異常')
    showError()
  }
})


function render(json){
}

function showError(){
}

 

參考

你真的會使用XMLHttpRequest嗎?
Ajax狀態值及狀態碼

 

關於如何mock數據

http-server

本地使用http-server node工具啟動一個靜態伺服器
以下是已經寫好的ajax用法,這裡採用GET類型,使用xhr.open('GET','/hello2.json',true)
在已經安裝好nodehttp-server的情況下,先cd到對應的文件夾。然後通過http-server啟動本地server。

   


通過訪問127.0.0.1:8080/indexl.html,併進入控制台,即可看到mock結果

 

 

具體ajax用法代碼:

<!DOCTYPE html>
<html lang="en">
<head>
  <meta charset="UTF-8">
  <meta name="viewport" content="width=device-width, initial-scale=1.0">
  <meta http-equiv="X-UA-Compatible" content="ie=edge">
  <title>Document</title>
</head>
<body>
  <script type="text/javascript">
  // ajax GET
  var xhr = new XMLHttpRequest()
  xhr.open('GET','/hello2.json',true)
  xhr.send()
  xhr.onload = function(){
    console.log(xhr.status)
    if((xhr.status >= 200 && xhr.status < 300)|| xhr.status === 304){
      var data = xhr.responseText
      console.log(data)
      console.log(JSON.parse(data))
    }else{
      console.log('error')
    }
  }
  xhr.onerror = function(){
    console.log('error')
  }


  </script>
</body>
</html>

模擬介面的json文件內容:

//hello2.json 內容
{
  "name": "go",
  "success": true,
  "data": [
    "70",
    "80",
    "90",
    "年代"
  ]
}

 

github

在github上面寫一個伺服器進行mock
具體和本地區別不大,只是需要註意模擬介面的地址,因為功能變數名稱是github.com,所以前面還需要加項目名,詳情見github/mocktest裡面的README.md
測試:
github pages

 

線上mock

使用easy-mock.com進行mock數據

  1. 進入easy-mock.com,登錄註冊賬號之後進入創建項目,輸入名稱然後創建

       

     

     

  2. 進入創建好的項目    
  3. 選擇創建介面  

     

  4. 填寫類型(get/post)、描述、並輸入JSON格式的內容,點擊創建    
  5. 生成鏈接,複製該鏈接    
  6. 將該鏈接粘貼到之前寫好的ajax用法的xhr.open('GET','',true)當中

          7.  打開頁面,進入控制台查看mock結果

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

-Advertisement-
Play Games
更多相關文章
  • Git config 簡單介紹 Git的配置選項有:-system,-global 和 -local。 ① system:系統級別的全局設置,對所有電腦用戶生效,文件在/etc/gitconfig; ② global:個人用戶的全局配置,對所有個人用戶的代碼庫生效,文件在$HOME/.config/ ...
  • 第一步 添加協議 第二步 添加選擇方式 第三步 ...
  • Fragment 1 切換到 Fragment 2時生命周期變化 1、通過 add hide show 方式來切換 Fragment Fragment1 的生命周期變化為:onCreate()、onCreateView、onStart()、onResume() 回調 onHiddenChanged( ...
  • 在Xcode的控制台里直接列印一個數組或者字典,輸出的都是一些Unicode的編碼,不方便調試. 要想看到中文,則要去獲取對應的key或者數組下標.得到具體某一個對象才能看到中文,給我們調試起來很不方便. 而現在可以使用LYLUnicode輸出中文, 使用也方便.代碼也簡潔,就幾行代碼. 直接把LY ...
  • js:(使用jquery) 頁面效果: ...
  • 一,效果圖。 二,代碼。 參考資料:《菜鳥教程》 ...
  • 目標 1. 常用數據類型 2. 基本語法 3. 變數的定義與賦值 4. 數據類型與轉換 5. 邏輯控制語句 6. 條件語句 7. 迴圈語句 8. 函數定義 基本語法 變數 變數名以字母或下劃線("_")開頭 變數可以包含數字、從 A 至 Z 的大小寫字母 JavaScript 區分大小寫 變數的聲明 ...
  • 1、系統主題選擇 “ 文件 → 首選項 → 顏色主題” 快捷鍵:[ Ctrl+K Ctrl+T ] 2、安裝主題 [ Ctrl+K Ctrl+M ] 打開擴展,搜索 theme,選擇安裝 點擊“重新載入” 3、“ 文件 → 首選項 → 設置” 輸入“ workbench.colorTheme ” 換 ...
一周排行
    -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.數據驗證 在伺服器端進行嚴格的數據驗證,確保接收到的數據符合預期格 ...