文档手册

HTTP客户端Fetch()函数

2024-07-18 17:31:12

Fetch() 函数

fetch() 在 Sciter 中是以 Fetch API 为模型的。

 签名:

fetch(url:string | request:Request [, options:object]): Promise(Response)

其中 options 是可能具有以下属性的对象:

  • method - 字符串,“GET” |“发布” |等。

  • headers - object ( string->string map ),请求头。

  • cache - 字符串,“no-cache” |“重装” |“默认”。

  • body - 参见 Fetch API。

  • sync - boolean,Sciter 的附加功能,当设置为 true fetch 时,执行同步数据检索。同步提取对于获取本地数据(本地文件或资源内容)非常有用。

 请求对象

请求对象具有以下方法和属性:

  • request.cache - 见 options.cache 上文;

  • request.context - 请求的数据类型,为以下之一:“html” |“图像” |“风格” |“光标” |“脚本” |“数据” |“字体” |“音频”;

  • request.headers - 只读,对象;

  • request.method - 只读,字符串;

  • request.url - 只读,字符串;

 Sciter 附加功能:

  • request.abort() - 方法,随叫随到将尝试中止当前请求;对中止请求的响应将属性 response.aborted 设置为 true。

  • request.progress(function(bytesLoaded, totalBytes) {...}) 该方法允许在下载进度时设置回调。

  • request.fulfill(data:ArrayBuffer, mime: string [,status:integer]) - 方法,On Call 会将数据设置为请求,就好像服务器使用该 data/mime 类型响应一样。

  • request.reject(status:integer) - 方法,On Call 将拒绝请求,就好像服务器使用该状态代码响应一样。

注意:fetch API 使用 HTTP 客户端获取远程文件,或使用 OS API 获取本地文件。在第一种情况下,返回值是 HTTP 响应代码,而在第二种情况下,错误代码来自操作系统。

 Response 对象

响应对象是 fetch() will 承诺返回的内容。它具有以下属性:

  • request - 与此响应关联的请求对象;

  • headers - 对象、响应标头;

  • url - 字符串,最终 URL。注意:如果发生重定向,它可能与 request.url 不同;

  • ok - boolean,如果为 true,则请求已成功获取;

  •   redirected -布尔;

  • status - 整数、200、404 等;

  • mimeType - string,接收数据的MIME类型;

  • arrayBuffer():Promise(arrayBuffer) - 以 arrayBuffer 的形式获取数据;

  • formData():Promise(object) ;

  • json():Promise(any) - 将响应作为准备使用的数据(解析的 JSON 响应);

  • text():Promise(string) - 以字符串形式获取响应数据;

 Sciter 附加功能:

  • aborted - 布尔值,如果为 true,则请求被 request.abort() 调用中止。

Sciter 中的可取消请求

下面是实现用户可取消的请求的示例代码:


// creating request:
let request = new Request("url", options);

// wiring click eevent handler that will abort the request:
document.on("click", "button#abort", function(){
  request.abort();
})

// issuing the request:

try {
let response = await fetch(request);

if(response.ok)
//... handle response data here ...
else if(response.status == 404)
//... wrong url ...
else
//... etc. ...

} catch(response) {
if(response.aborted)
//... ended by ,abort() call ...
else
//... some other problems, see response.status ...
}