用ajax與fetch調用阿裡雲免費介面

来源:http://www.cnblogs.com/skyHF/archive/2017/09/07/7488873.html
-Advertisement-
Play Games

最近學習態度比較積極,打算用react做一個小個人應用網站...所以從阿裡雲上買了些免費的介面,什麼QQ音樂排行查詢介面、IP地址查詢、天氣預報等等。調用時,發現身份校驗可以通過簡單修改頭部信息的方式,即向頭部加入APPCODE的key,以及相應的值。 但是之前沒有用過請求頭添加 so 記錄學習下. ...


  最近學習態度比較積極,打算用react做一個小個人應用網站...所以從阿裡雲上買了些免費的介面,什麼QQ音樂排行查詢介面、IP地址查詢、天氣預報等等。調用時,發現身份校驗可以通過簡單修改頭部信息的方式,即向頭部加入APPCODE的key,以及相應的值。

  但是之前沒有用過請求頭添加   so 記錄學習下...

 

一、首先直接放demo

1、jQuery

var requestUrl = "http://ali-qqmusic.showapi.com/top?topid=6";
$.ajax({
    type : "get",
    url : requestUrl ,
    dataType : "json" ,
    success: function(data) {
        console.log(data);
    }.bind(this),
    beforeSend: function(xhr) {
        xhr.setRequestHeader("Authorization", "APPCODE .....................");
    }
});

使用ajax的beforeSend方法向頭部添加信息

 

2、fetch

let requestUrl = "http://ali-qqmusic.showapi.com/top?topid=6";
fetch(requestUrl, {
    method: "get",
    headers: {
        Authorization: "APPCODE ......................"
    }
}).then(response => response.json()).then(data => console.log(data)).catch(e => console.log(e));

哈哈哈,其實有點寵fetch,這個時用ES6來寫。接下來來整理下相關API,以及簡單介紹下fetch

 

二、記錄jQuery ajax 時不時使用,但是快遺忘的API方法

ajax 常用的方法,什麼url、type、dataType、success之類的就不提了

1、async  預設是true表示請求為非同步請求,如果設置為false表示同步,ajax下麵的方法要等請求結束後才會調用

2、beforeSend(xhr)   用於發送請求前修改XMLHttpRequest對象的函數,主要用作修改http頭部,就像上面的demo

3、context   用於綁定回調函數的上下文,即this,設置了它就相當於在回調函數上加入了bind(context)一樣

4、jsonp    用於跨域操作,重寫回調函數的名字

5、timeout    請求超時時間

6、complete(xhr , ts)    無論請求成功or失敗的回調函數

 

三、fetch

之前一直沒用用過這種請求方式,現在看來這種請求方式代碼顯得十分的優美,畢竟Fetch API是基於Promises設計的。fetch是瀏覽器提供的原生網路請求介面,但是它的相容性還是有所欠缺的,具體相容情況如下圖

常用的寫法有兩種

//方式一
fetch('./api/XXX.json')
.then(
    function(response) {
        if(response.status !== 200) {
            console.log('Status Code: ' + response.status);
            return;
        }
        response.json().then(function(data) {
            console.log(data);
        });
    }
)
.catch(function(err) {
    console.log(err);
});
//方式二
function status(response) {  
  if (response.status == 200) {  
    return Promise.resolve(response)  
  } else {  
    return Promise.reject(new Error(response.statusText))  
  }  
}
function json(response) {  
  return response.json()  
}
fetch('./api/XXX.json').then(status).then(json)  
.then(function(data) {  
    console.log(data);
}).catch(function(err) {  
    console.log('err);  
});

  在fetch方法中,首先返回的response對象,so 第一個then中的函數參數為res,然後通過響應的狀態碼判斷請求是否成功,成功後調用response的json()方法,這個也是返回一個Promise對象,所以可以連續then,最後的catch可以抓取代碼執行時的異常信息。 

  然後就是fetch第一個參數為URL,第二個參數可以加入請求方式、頭信息、表單信息等

fetch(url, {  
    method: 'post',  
    headers: {  
      "Content-type": "application/x-www-form-urlencoded; charset=UTF-8"  
    },  
    body: 'foo=bar&lorem=ipsum'  
})

  最後就是fetch中的一些坑,沒遇到過,先記錄下。

 1、Fetch 請求預設是不帶 cookie 的,需要設置 fetch(url, {credentials: 'include'})

 2、伺服器返回 400,500 錯誤碼時並不會 reject,只有網路錯誤這些導致請求不能完成時,fetch 才會被 reject。

 

 

搞定!!!

 


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

-Advertisement-
Play Games
更多相關文章
  • Boolean(value) 是把值轉換成Boolean類型 example var b1 = Boolean("");//返回false,空字元串 var b2 = Boolean("s");//返回true,非空字元串 var b3 = Boolean(0);//返回false,數字0 var ...
  • 例圖: ...
  • 朝朝暮暮 終於寫出來了,好幾年前的心愿了 ...
  • vue-cli執行 進行打包,生成dist文件夾,把該文件夾下的文件直接複製到nginx伺服器目錄下,就可打開項目,但是只有首頁是可以看到的,再刷新一下就404了,原因是vue的項目為單頁應用,路由找不到所致。所以要在nginx伺服器配置對所有的路徑或者文件夾進行跳轉。重定向到首頁index下,這樣 ...
  • 1、安裝webpack 全局安裝代碼: 2、項目中使用webpack (1)進入項目目錄 cd C:\Users\dell\Documents\HBuilderProject\hello (2)初始化webpack npm init (5)本項目使用webpack webpack hello.js ...
  • *{ margin: 0; padding: 0; } ul,li{ list-style: none; } .ui-slide-box{ width: 300px; ... ...
  • html代碼: js代碼: $("#store_img").on("change",function(){ var objUrl = getObjectURL(this.files[0]) ; //獲取圖片的路徑,該路徑不是圖片在本地的路徑 if (objUrl) { $(".hide_img im ...
  • JavaScript 有一套完全不同於其它語言的對 this 的處理機制。 在五種不同的情況下 ,this 指向的各不相同。 1。全局範圍內 當在全部範圍內使用 this,它將會指向全局對象。 2。函數調用 這裡 this 也會指向全局對象,可以這麼理解 在這裡,我們可以這麼理解沒有明確的調用對象的 ...
一周排行
    -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.數據驗證 在伺服器端進行嚴格的數據驗證,確保接收到的數據符合預期格 ...