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
  • 示例項目結構 在 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# ...