HTTP客户端Fetch()函数
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 ...
}