my.request
小程式網路請求。
my.request
目前支援GET/POST/DELETE
。my.request
目前只支援 HTTPS 協議的請求。
基礎庫 1.11.0 及以上版本支援該介面可以使用
my.canIUse('request')
做相容性處理。詳見 小程式基礎庫說明。mPaaS 10.1.60 及以上版本支援該介面。
介面
my.httpRequest
將被廢棄,請使用my.request
來代替。my.request
的要求標頭預設值為{'content-type': 'application/json'}
,而不是{'content-type': 'application/x-www-form-urlencoded'}
。此外,要求標頭對象裡面的 key 和 value 必須是 String 類型。
更多問題請參見 my.request 常見問題。
使用說明:
需預先在 小程式發布 > 開放平台小程式管理 中開啟 小程式許可權控制開關,並在 伺服器網域名稱白名單 中佈建網域名白名單。小程式在以下 API 呼叫時只能與白名單中的網域名稱進行通訊:HTTP 要求(
my.request
)、上傳檔案(my.uploadFile
)。添加伺服器網域名稱白名單後,需要重新打包上傳產生體驗版,伺服器網域名稱才會生效。
在 IDE 上進行調試時,請使用真機預覽調試。
入參
名稱 | 類型 | 必填 | 描述 |
url | String | 是 | 目標伺服器 url |
headers | Object | 否 | 佈建要求的 HTTP 頭,預設為 |
method | String | 否 | 預設為 GET,目前支援 GET/POST/DELETE。 |
data | Object / ArrayBuffer | 否 | 參考下文 data 參數說明。 |
timeout | Number | 否 | 逾時時間,單位為 ms,預設為 30000 |
dataType | String | 否 | 期望返回的資料格式,預設為 json,支援 json、text、base64 和 arraybuffer。 |
success | Function | 否 | 調用成功的回呼函數 |
fail | Function | 否 | 調用失敗的回呼函數 |
complete | Function | 否 | 調用結束的回呼函數(調用成功、失敗都會執行) |
data 參數說明
傳給伺服器的資料最終會是 String 類型,如果資料不是 String 類型,會被轉換成 String 。轉換規則如下:
若方法為
GET
,會將資料轉換成 query string:encodeURIComponent(k)=encodeURIComponent(v)&encodeURIComponent(k)=encodeURIComponent(v)...
。若方法為
POST
且headers['content-type']
為application/json
,會對資料進行 JSON 序列化。若方法為
POST
且headers['content-type']
為application/x-www-form-urlencoded
,會將資料轉換成 query string:encodeURIComponent(k)=encodeURIComponent(v)&encodeURIComponent(k)=encodeURIComponent(v)...
。
referer 說明
網路請求的
referer
Header 不可設定。其格式固定為
https://urlhost/{appid}/{version}/page-frame.html
,其中{appid}
為小程式的 APPID,{version}
為小程式的版本號碼。
success 傳回值
名稱 | 類型 | 描述 |
data | String | 響應資料,格式取決於請求時的 |
status | Number | 響應碼 |
headers | Object | 回應標頭 |
錯誤碼
錯誤碼 | 描述 | 解決方案 |
1 | 請求沒有結束,就跳轉到了另一個頁面 | 建議請求完成後再進行頁面跳轉 |
2 | 參數錯誤。 |
|
11 | 無權跨域 | 檢查請求網域名稱是否添加了網域名稱白名單,開發版測試可以點擊 IDE 右上方 > 詳情,勾選 忽略 httpRequest 網域名稱合法性檢查。注意:新版本上架,一定要添加 伺服器網域名稱白名單,否則會出現異常。 |
12 | 網路出錯 | 建議檢查網路環境是否正常,伺服器是否穩定。 |
13 | 逾時 | 建議檢查網路環境是否正常,伺服器是否正常響應,若請求需要時間長,可適當設定逾時時間 timeout。 |
14 | 解碼失敗 | 建議檢查前後端請求和響應資料格式是否一致。如返回資料格式 text 與入參 dataType 值 JSON 不一致而導致介面報錯,請修改後台返回資料格式為 JSON。 |
15 | 傳參失敗。 | 小程式頁面傳參如果做 urlencode 需要把整體參數進行編碼。 |
19 | HTTP 錯誤 |
|
20 | 請求已被停止/服務端限流 | 請確認請求伺服器是否能正常請求和響應。 |
23 | 代理請求失敗。 | 建議檢查代理配置是否正確。 |
當入參 dataType
值為 json
時,小程式架構會先對返回結果做 JSON.prase
操作,如果解析失敗,則會返回 error
為 14 的錯誤。當入參 dataType
值為 text
時,如果返回的內容格式不符,也會返回 error
為 14 的錯誤。遇到此錯誤時,請先檢查 dataType
的設定是否正確。
若 my.request
調用返回 無權調用該介面,則需要在 開放平台小程式管理 > 伺服器網域名稱白名單 中佈建網域名白名單。
程式碼範例
案例僅供參考,建議使用您自己的地址進行測試。
my.request({
url: 'https://example.org/post',
method: 'POST',
data: {
from: '支付寶',
production: 'AlipayJSAPI',
},
dataType: 'json',
success: function(res) {
my.alert({content: 'success'});
},
fail: function(res) {
my.alert({content: 'fail'});
},
complete: function(res) {
my.hideLoading();
my.alert({content: 'complete'});
}
});
// 返回RequestTask,可以調用abort方法取消請求
const task = my.request({url: 'https://example.org/post'})
task.abort()
傳回值
RequestTask
網路請求任務對象。
方法
RequestTask.abort()
my.uploadFile
mPaaS 10.1.32 及以上版本支援該介面。
上傳本地資源到開發人員伺服器。
使用說明:
需預先在 開放平台小程式管理 > 伺服器網域名稱白名單 中佈建網域名白名單。小程式在以下 API 呼叫時只能與白名單中的網域名稱進行通訊:HTTP 要求(
my.request
)、上傳檔案(my.uploadFile
)。
入參
名稱 | 類型 | 必填 | 描述 |
url | String | 是 | 開發人員伺服器位址 |
filePath | String | 是 | 要上傳檔案資源的本地定位器 |
fileName | String | 是 | 檔案名稱,即對應的 key, 開發人員在伺服器端通過這個 key 可以擷取到檔案二進位內容 |
fileType | String | 是 | 檔案類型,image/video/audio |
hideLoading | Bool | 否 | 是否隱藏 loading 圖(預設值為 false) |
header | Object | 否 | HTTP 要求 Header |
formData | Object | 否 | HTTP 要求中其他額外的 form 資料 |
success | Function | 否 | 調用成功的回呼函數 |
fail | Function | 否 | 調用失敗的回呼函數 |
complete | Function | 否 | 調用結束的回呼函數(調用成功、失敗都會執行) |
success 傳回值
名稱 | 類型 | 描述 |
data | String | 伺服器返回的資料 |
statusCode | String | HTTP 狀態代碼 |
header | Object | 伺服器返回的 Header |
錯誤碼
error | 描述 | 解決方案 |
11 | 檔案不存在 | 檢查本地檔案是否存在 |
12 | 上傳檔案失敗 | 檢查網路和伺服器 |
13 | 沒有許可權 | 檢查使用權限設定 |
程式碼範例
案例僅供參考,建議使用您自己的地址進行測試。
my.uploadFile({
url: '請使用自己伺服器位址',
fileType: 'image',
fileName: 'file',
filePath: '...',
success: (res) => {
my.alert({
content: '上傳成功'
});
},
});
UploadTask
監聽上傳進度變化,取消上傳任務的對象。
方法
方法 | 描述 |
UploadTask.abort() | 中斷上傳任務 |
UploadTask.onProgressUpdate(function callback) | 監聽上傳進度變化事件 |
程式碼範例
const task = my.uploadFile({
url: '請使用自己伺服器位址',
fileType: 'image',
fileName: 'file',
filePath: '...',
});
task.onProgressUpdate(({progress, totalBytesWritten, totalBytesExpectedToWrite}) => {
})
task.abort()
常見問題
Q:小程式上傳圖片可以自動轉成 Base64(基於 64 個可列印字元來表示位元據的方法)嗎?
A:小程式暫不支援圖片轉成 Base64。
Q:
my.uploadFile
如何擷取伺服器返回的錯誤資訊?A:
可以通過 success 回調中的 data 參數擷取。
可以在服務端增加一個日誌擷取介面。如果上傳失敗,就請求到日誌擷取介面擷取詳細的失敗日誌。
Q:
my.uploadFile
預設逾時時間是多長?是否可以設定預設延長時間?A:
my.uploadFile
預設逾時時間是 30s,目前無法設定預設延長時間。Q:使用
my.uploadFile
上傳檔案,為何報錯error:12
?A:上傳失敗導致報錯
error:12
,造成上傳失敗的可能原因有:檔案過大。
上傳時間超過 30s。
沒有許可權。
Q:使用
my.uploadFile
上傳圖片至後台,接收的是二進位圖片,再從後台發送小程式前台對應的二進位圖片,小程式前台是如何解析的?A:上傳圖片是後端通過二進位流接受圖片,之後後端只需提供對應的圖片在伺服器上的位置地址即可。
Q:調用
my.uploadfile
,為何報錯error: 4
,無許可權調用此介面?A:請求的 URL 沒有配置白名單,建議添加 URL 的網域名稱為白名單。
Q:小程式是否支援上傳 Excel 檔案?
A:目前
my.uploadFile
上傳檔案類型支援圖片、視頻、音頻( image / video / audio),暫不支援其他類型的檔案。Q:
my.uploadFile
是否支援多張圖片同時上傳?A:
my.uploadFile
暫不支援多張圖片同時上傳,一次只能上傳一張圖片。
my.downloadFile
mPaaS 10.1.32 及以上版本支援該介面。
下載檔案資源到本地。
入參
名稱 | 類型 | 必填 | 描述 |
url | String | 是 | 下載檔案地址 |
header | Object | 否 | HTTP 要求 Header |
success | Function | 否 | 調用成功的回呼函數 |
fail | Function | 否 | 調用失敗的回呼函數 |
complete | Function | 否 | 調用結束的回呼函數(調用成功、失敗都會執行) |
success 傳回值
名稱 | 類型 | 描述 |
apFilePath | String | 檔案臨時存放的位置 |
錯誤碼
error | 描述 | 解決方案 |
12 | 下載失敗 | 建議檢查網路和伺服器 |
13 | 沒有許可權 | 建議檢查許可權 |
20 | 請求的 URL 不支援 HTTP | 建議將請求的 URL 改成 HTTPS |
程式碼範例
案例僅供參考,建議使用您自己的地址進行測試。
// API-DEMO page/API/download-file/download-file.json
{
"defaultTitle": "下載檔案"
}
<!-- API-DEMO page/API/download-file/download-file.axml-->
<view class="container">
<button onTap="download">下載圖片並顯示</button>
</view>
// API-DEMO page/API/download-file/download-file.js
Page({
download() {
my.downloadFile({
url: 'https://img.alicdn.com/tfs/TB1x669SXXXXXbdaFXXXXXXXXXX-520-280.jpg',
success({ apFilePath }) {
my.previewImage({
urls: [apFilePath],
});
},
fail(res) {
my.alert({
content: res.errorMessage || res.error,
});
},
});
},
})
my.connectSocket
mPaaS 10.1.60 及以上版本支援該介面。
建立一個 WebSocket 的串連。
一個小程式同時只能保留一個 WebSocket 串連,如果當前已存在 WebSocket 串連,會自動關閉該串連,並重新建立一個新的 WebSocket 串連。
入參
名稱 | 類型 | 必填 | 描述 |
url | String | 是 | 目標伺服器 URL。注意:部分新發布的小程式只支援 wss 協議。 |
data | Object | 否 | 請求的參數 |
header | Object | 否 | 佈建要求的頭部 |
success | Function | 否 | 調用成功的回呼函數 |
fail | Function | 否 | 調用失敗的回呼函數 |
complete | Function | 否 | 調用結束的回呼函數(調用成功、失敗都會執行) |
錯誤碼
error | 描述 | 解決方案 |
1 | 未知錯誤 | - |
2 | 網路連接已經存在 | 一個小程式在一段時間內只能保留一個 WebSocket 串連。如果當前已存在 WebSocket 串連,那麼會自動關閉該串連,並重新建立一個新的 WebSocket 串連。 |
3 | URL 參數為空白 | 替換 URL 連結。 |
4 | 無法識別的 URL 格式 | 替換 URL 連結。 |
5 | URL 必須以 | 替換 URL 連結。 |
6 | 串連伺服器逾時 | 稍後重試。 |
7 | 伺服器返回的 HTTPS 認證無效 | 小程式必須使用 HTTPS/WSS 發起網路請求。請求時系統會對伺服器網域名稱使用的 HTTPS 認證進行校正,如果校正失敗,則請求不能成功發起。由於系統限制,不同平台對於認證要求的嚴格程度不同。為了保證小程式的相容性,建議開發人員按照最高標準進行認證配置,並使用相關工具檢查現有認證,確保其符合要求。 |
8 | 服務端返回協議頭無效 | 從 2019 年 5 月開始新建立的小程式,預設強制使用 HTTPS 和 WSS 協議,不再支援 HTTP 和 WS 協議。 |
9 | WebSocket 請求沒有指定 | 請指定 |
10 | 網路連接沒有開啟,無法發送訊息 | 請正常串連伺服器後再調用 my.sendSocketMessage 發送資料訊息,可通過 my.onSocketOpen 監聽事件來判斷與伺服器建立正確串連。注意:通過 WebSocket 串連發送資料,需要先使用 my.connectSocket 發起串連,在 my.onSocketOpen 回調之後再調用 my.sendSocketMessage 發送資料。 |
11 | 訊息發送失敗 | 稍後重試。 |
12 | 無法申請更多記憶體來讀取網路資料 | 請檢查記憶體。 |
程式碼範例
案例僅供參考,建議使用您自己的地址進行測試。
my.connectSocket({
url: 'test.php',
data: {},
header:{
'content-type': 'application/json'
},
});
my.onSocketOpen
mPaaS 10.1.60 及以上版本支援該介面。
監聽 WebSocket 串連開啟事件。
入參
Object 類型,屬性如下:
屬性 | 類型 | 必填 | 說明 |
callback | Function | 是 | WebSocket 串連開啟事件的回呼函數。 |
程式碼範例
案例僅供參考,建議使用您自己的地址進行測試。
my.connectSocket({
url: 'test.php',
});
my.onSocketOpen(function(res) {
console.log('WebSocket 串連已開啟!');
});
my.offSocketOpen
mPaaS 10.1.60 及以上版本支援該介面。
取消監聽 WebSocket 串連開啟事件。
程式碼範例
案例僅供參考,建議使用您自己的地址進行測試。
Page({
onLoad() {
this.callback = this.callback.bind(this);
my.onSocketOpen(this.callback);
},
onUnload() {
my.offSocketOpen(this.callback);
},
callback(res) {
},
})
是否需要傳 callback 值
不傳遞 callback 值,則會移除監聽所有的事件回調。程式碼範例如下:
my.offSocketOpen();
傳遞 callback 值,只移除對應的 callback 事件。程式碼範例如下:
my.offSocketOpen(this.callback);
my.onSocketError
mPaaS 10.1.60 及以上版本支援該介面。
監聽 WebSocket 錯誤。
入參
Object 類型,屬性如下:
參數 | 類型 | 必填 | 說明 |
callback | Function | 是 | WebSocket 錯誤事件的回呼函數。 |
程式碼範例
案例僅供參考,建議使用您自己的地址進行測試。
my.connectSocket({
url: '開發人員的伺服器位址'
});
my.onSocketOpen(function(res){
console.log('WebSocket 串連已開啟!');
});
my.onSocketError(function(res){
console.log('WebSocket 串連開啟失敗,請檢查!');
});
my.offSocketError
mPaaS 10.1.60 及以上版本支援該介面。
取消監聽 WebSocket 錯誤。
程式碼範例
案例僅供參考,建議使用您自己的地址進行測試。
Page({
onLoad() {
this.callback = this.callback.bind(this);
my.onSocketError(this.callback);
},
onUnload() {
my.offSocketError(this.callback);
},
callback(res) {
},
})
是否需要傳 callback 值
不傳遞 callback 值,則會移除監聽所有的事件回調。程式碼範例如下:
my.offSocketError();
傳遞 callback 值,只移除對應的 callback 事件。程式碼範例如下:
my.offSocketError(this.callback);
my.sendSocketMessage
mPaaS 10.1.60 及以上版本支援該介面。
通過 WebSocket 串連發送資料,需要先使用 my.connectSocket 發起建連,並在 my.onSocketOpen 回調之後再發送資料。
入參
名稱 | 類型 | 必填 | 描述 |
data | String | 是 | 需要發送的內容:普通的常值內容 String 或者經 base64 編碼後的 String。 |
isBuffer | Boolean | 否 | 如果需要發送位元據,需要將入參資料經 base64 編碼成 String 後,賦值 |
success | Function | 否 | 回呼函數。 |
fail | Function | 否 | 調用失敗的回呼函數。 |
complete | Function | 否 | 調用結束的回呼函數(調用成功、失敗都會執行)。 |
程式碼範例
案例僅供參考,建議使用您自己的地址進行測試。
my.sendSocketMessage({
data: this.data.toSendMessage, // 需要發送的內容
success: (res) => {
my.alert({content: '資料發送!' + this.data.toSendMessage});
},
});
my.onSocketMessage
mPaaS 10.1.60 及以上版本支援該介面。
監聽 WebSocket 接受到伺服器的訊息事件。
回調傳回值
名稱 | 類型 | 描述 |
data | String/ArrayBuffer | 伺服器返回的訊息:普通的文本 String 或者經 base64 編碼後的 String。 |
isBuffer | Boolean | 如果此欄位值為 |
程式碼範例
案例僅供參考,建議使用您自己的地址進行測試。
my.connectSocket({
url: '伺服器位址'
})
my.onSocketMessage(function(res) {
console.log('收到伺服器內容:' + res.data)
})
my.offSocketMessage
mPaaS 10.1.60 及以上版本支援該介面。
取消監聽 WebSocket 接受到伺服器的訊息事件。
程式碼範例
案例僅供參考,建議使用您自己的地址進行測試。
my.connectSocket({
url: '伺服器位址'
})
my.onSocketMessage(function(res) {
console.log('收到伺服器內容:' + res.data)
})
my.offSocketMessage();
是否需要傳 callback 值
不傳遞 callback 值,則會移除監聽所有的事件回調。程式碼範例如下:
my.offSocketMessage();
傳遞 callback 值,只移除對應的 callback 事件。程式碼範例如下:
my.offSocketMessage(this.callback);
my.closeSocket
mPaaS 10.1.60 及以上版本支援該介面。
關閉 WebSocket 串連。
入參
名稱 | 類型 | 必填 | 描述 |
success | Function | 否 | 回呼函數 |
fail | Function | 否 | 調用失敗的回呼函數 |
complete | Function | 否 | 調用結束的回呼函數(調用成功、失敗都會執行) |
程式碼範例
案例僅供參考,建議使用您自己的地址進行測試。
my.onSocketOpen(function() {
my.closeSocket()
})
my.onSocketClose(function(res) {
console.log('WebSocket 已關閉!')
})
my.onSocketClose
mPaaS 10.1.60 及以上版本支援該介面。
監聽 WebSocket 關閉。
入參
Object 類型,屬性如下:
參數 | 類型 | 必填 | 描述 |
callback | Function | 是 | WebSocket 串連關閉事件的回呼函數。 |
程式碼範例
案例僅供參考,建議使用您自己的地址進行測試。
onLoad() {
// 注意: 回調方法的註冊在整個小程式啟動階段只要做一次,調多次會有多次回調
my.onSocketClose((res) => {
my.alert({content: '串連已關閉!'});
this.setData({
sendMessageAbility: false,
closeLinkAbility: false,
});
});
// 注意: 回調方法的註冊在整個小程式啟動階段只要做一次,調多次會有多次回調
my.onSocketOpen((res) => {
my.alert({content: '串連已開啟!'});
this.setData({
sendMessageAbility: true,
closeLinkAbility: true,
});
});
my.onSocketError(function(res){
my.alert('WebSocket 串連開啟失敗,請檢查!' + res);
});
// 注意: 回調方法的註冊在整個小程式啟動階段只要做一次,調多次會有多次回調
my.onSocketMessage((res) => {
my.alert({content: '收到資料!' + JSON.stringify(res)});
});
}
connect_start() {
my.connectSocket({
url: '伺服器位址', // 開發人員伺服器介面地址,必須是 wss 協議,且網域名稱必須是後台配置的合法網域名稱
success: (res) => {
my.showToast({
content: 'success', // 文字內容
});
},
fail:()=>{
my.showToast({
content: 'fail', // 文字內容
});
}
});
},
my.offSocketClose
mPaaS 10.1.60 及以上版本支援該介面。
取消監聽 WebSocket 關閉。
程式碼範例
案例僅供參考,建議使用您自己的地址進行測試。
Page({
onLoad() {
my.onSocketClose(this.callback);
},
onUnload() {
my.offSocketClose(this.callback);
// my.offSocketClose();
},
callback(res) {
my.alert({content: '串連已關閉!'});
this.setData({
sendMessageAbility: false,
closeLinkAbility: false,
});
},
})
是否需要傳 callback 值
不傳遞 callback 值,則會移除監聽所有的事件回調。範例程式碼如下:
my.offSocketClose();
傳遞 callback 值,只移除對應的 callback 事件。範例程式碼如下:
my.offSocketClose(this.callback);
my.rpc(Object)
小程式架構專用 rpc 介面,小程式網關介面。
參數說明
名稱 | 類型 | 必填 | 描述 |
operationType | String | 是 | 網關 operationtype。 |
requestData | Array | 否 | 網關請求資料。 |
success | Function | 否 | 調用成功的回呼函數。 |
fail | Function | 否 | 調用失敗的回呼函數。 |
complete | Function | 否 | 調用結束的回呼函數(調用成功、失敗都會執行)。 |
程式碼範例
案例僅供參考,建議使用您自己的地址進行測試。
my.rpc({
operationType: 'com.xx.xx',
requestData: [{
"param1":"",
"param2":0
}],
success: res => {
},
fail: res => {
}
});