数据请求

接口声明

  1. { "name": "system.fetch" }

导入模块

  1. import fetch from '@system.fetch' const fetch = require('@system.fetch')

接口定义

fetch.fetch(OBJECT)

获取网络数据

参数:

参数名类型必填说明
urlString资源 url
dataString/Object/ArrayBuffer 1030+请求的参数,可以是字符串,或者是 js 对象、arraybuffer 对象。参考 data与Content-Type关系 部分
headerObject请求的 header,会将其所有属性设置到请求的 header 部分。User-Agent设置在1040版本开始支持。示例:{"Accept-Encoding": "gzip, deflate","Accept-Language": "zh-CN,en-US;q=0.8,en;q=0.6"}
methodString默认为 GET,可以是:OPTIONS,GET,HEAD,POST,PUT,DELETE,TRACE,CONNECT
responseType 1030+String支持返回类型是 text,json,file,arraybuffer,默认会根据服务器返回 header 中的 Content-Type 确定返回类型,详见 success返回值
successFunction成功返回的回调函数
failFunction失败的回调函数,可能会因为权限失败
completeFunction结束的回调函数(调用成功、失败都会执行)

data 与 Content-Type 关系

dataContent-Type说明
String不设置Content-Type 默认为 text/plain,data 值作为请求的 body
String任意Typedata 值作为请求的 body
Object不设置Content-Type 默认为 application/x-www-form-urlencoded,data 按照 url 规则进行 encode 拼接作为请求的 body
Objectapplication/x-www-form-urlencodeddata 按照 url 规则进行 encode 拼接作为请求的 body
Objectapplication/x-www-form-urlencoded之外的任意type1010 以前的版本会调用失败;从 1010 版本开始,如果 manifest 中申明的 minPlatformVersion>=1010,会将 data 转为字符串作为请求的 body
ArrayBuffer 1030+不设置Content-Type 默认为 application/octet-stream,data 值作为请求的 body
ArrayBuffer 1030+任意Typedata 值作为请求的 body
success 返回值:
参数名类型说明
codeInteger服务器状态 code
dataString/Object 1030+/ArrayBuffer 1030+参考 responseType与success中data关系 部分
headersObject服务器 response 的所有 header
responseType与success中data关系:
responseTypedata说明
String服务器返回的 header 中 type 是 text/*或 application/json、application/javascript、application/xml,值是文本内容,否则是存储的临时文件的 uri,临时文件如果是图片或者视频内容,可以将图片设置到 image 或 video 控件上显示
textString返回普通文本
jsonObject1030+返回 js 对象
fileString返回存储的临时文件的 uri
arraybufferArrayBuffer 1030+返回 ArrayBuffer 对象

示例:

  1. fetch.fetch({
  2. url: 'http://www.example.com',
  3. responseType: 'text',
  4. success: function (response) {
  5. console.log(`the status code of the response: ${response.code}`)
  6. console.log(`the data of the response: ${response.data}`)
  7. console.log(
  8. `the headers of the response: ${JSON.stringify(response.headers)}`
  9. )
  10. },
  11. fail: function (data, code) {
  12. console.log(`handling fail, errMsg = ${data}`)
  13. console.log(`handling fail, errCode = ${code}`)
  14. }
  15. })
  16. // 我们也可以使用promise的方式处理回调
  17. fetch.fetch({
  18. url: 'http://www.example.com',
  19. responseType: 'text'
  20. }).then(res => {
  21. const result = res.data
  22. console.log(`the status code of the response: ${result.code}`)
  23. console.log(`the data of the response: ${result.data}`)
  24. console.log(
  25. `the headers of the response: ${JSON.stringify(result.headers)}`
  26. )
  27. }).catch(error => {
  28. console.log(`handling fail, errMsg = ${error.data}`)
  29. console.log(`handling fail, errCode = ${error.code}`)
  30. })

后台运行限制

无限制。后台运行详细用法参见后台运行 脚本