异步请求web/ajax
异步从服务端载入数据。
基本用法
import ajax from "web/ajax";
ajax({
    type: "GET",
    url: "",
    data: null,
    success(data) {
        console.log(data);
    }
});跨域问题
浏览器默认限制只能向当前网页相同域名的服务器发送请求。
跨域头
为了支持跨域请求,服务器响应中应包含:
Access-Control-Allow-Origin: *OPTIONS 请求
如果设置了 contentType 为 application/json,则浏览器首先会发送一个 OPTIONS 请求。
服务器应处理该请求并返回 200 状态码。
登陆信息
只有设置了 withCredentials 为 true 时才会发送 Cookie(包含登陆信息)到服务器。
服务器响应中应包含:
Access-Control-Allow-Origin: tealui.com         # 值应为实际的域名且不能为 *,其值可以从请求头 Origin 获取。
Access-Control-Allow-Methods: OPTIONS,GET,POST  # 值可以从请求头 Access-Control-Request-Method 获取。
Access-Control-Allow-Headers: contentType       # 值可以从请求头 Access-Control-Request-Headers 获取。
Access-Control-Allow-Credentials: true另参考
API
全局
| 函数 | 描述 | ||||||||
|---|---|---|---|---|---|---|---|---|---|
                                    
                                    ⮞
                                    ajax(...)(options?:
                                    
                                 | 
                                
                                     发送一个异步请求。  | 
                                
                            ||||||||
                                    
                                    ⮞
                                    checkStatus(status)(status:
                                    判断一个 HTTP 状态码是否表示正确响应。 
 返回值类型: 如果正确则返回 true, 否则返回 false 。一般地,2xx、304、1223 被认为是正确的状态吗。  | 
                                
                                     判断一个 HTTP 状态码是否表示正确响应。  | 
                                
                            
Ajax 类
表示一个异步请求。
| 字段 | 类型 | 描述 | 
|---|---|---|
                                
                                ⮞
                                type
                                : string = "GET"
                                请求的类型(方法、谓词)。请求类型应全大写。  | 
                            
                                string
                             | 
                            
                                 请求的类型(方法、谓词)。请求类型应全大写。  | 
                            
                        
                                
                                ⮞
                                url
                                : string = location.href
                                请求的地址。可以是相对于当前页面地址的相对地址。  | 
                            
                                string
                             | 
                            
                                 请求的地址。可以是相对于当前页面地址的相对地址。  | 
                            
                        
                                
                                ⮞
                                data
                                : any
                                请求的数据。可以是字符串、JSON 对象或 FormData。  | 
                            
                                any
                             | 
                            
                                 请求的数据。可以是字符串、JSON 对象或 FormData。  | 
                            
                        
                                
                                ⮞
                                contentType
                                : string = "application/x-www-form-urlencoded"
                                请求数据的 MIME 类型。  | 
                            
                                string
                             | 
                            
                                 请求数据的 MIME 类型。  | 
                            
                        
                                
                                ⮞
                                headers
                                : { [name: string]: string; }
                                附加的请求头。  | 
                            
                                object
                             | 
                            
                                 附加的请求头。  | 
                            
                        
                                
                                ⮞
                                username
                                : string
                                服务器的用户名。  | 
                            
                                string
                             | 
                            
                                 服务器的用户名。  | 
                            
                        
                                
                                ⮞
                                password
                                : string
                                服务器的密码。  | 
                            
                                string
                             | 
                            
                                 服务器的密码。  | 
                            
                        
                                
                                ⮞
                                withCredentials
                                : boolean
                                是否发送用户凭证(如 Cookie 登陆信息)。  | 
                            
                                boolean
                             | 
                            
                                 是否发送用户凭证(如 Cookie 登陆信息)。  | 
                            
                        
                                
                                ⮞
                                responseType
                                : "text" | "json" | "document" | "arraybuffer" | "blob"
                                响应数据的类型。 说明其中 "arraybuffer" 和 "blob" 仅支持:CH 31+、FF 12+、IE 10+、OP 18+、SF 7.1+、Android 4.4.1+。 参考 | 
                            
                                string
                             | 
                            
                                 响应数据的类型。  | 
                            
                        
                                
                                ⮞
                                timeout
                                : number
                                请求的超时毫秒数。如果小于 0 则不设置超时。  | 
                            
                                number
                             | 
                            
                                 请求的超时毫秒数。如果小于 0 则不设置超时。  | 
                            
                        
                                
                                ⮞
                                xhr
                                : XMLHttpRequest
                                获取底层发送请求的对象。  | 
                            
                                XMLHttpRequest
                             | 
                            
                                 获取底层发送请求的对象。  | 
                            
                        
                                
                                ⮞
                                status
                                : number
                                获取服务器返回的状态码。如果小于 0 表示请求未发出。  | 
                            
                                number
                             | 
                            
                                 获取服务器返回的状态码。如果小于 0 表示请求未发出。  | 
                            
                        
                                
                                ⮞
                                response
                                : any
                                获取服务器响应的数据。数据的类型根据 responseType 决定。  | 
                            
                                any
                             | 
                            
                                 获取服务器响应的数据。数据的类型根据 responseType 决定。  | 
                            
                        
                                
                                ⮞
                                success
                                : (response: any, sender: Ajax) => void
                                请求成功的回调函数。  | 
                            
                                function
                             | 
                            
                                 请求成功的回调函数。  | 
                            
                        
                                
                                ⮞
                                error
                                : (error: string | Error, sender: Ajax) => void
                                请求失败的回调函数。  | 
                            
                                function
                             | 
                            
                                 请求失败的回调函数。  | 
                            
                        
                                
                                ⮞
                                complete
                                : (error: string | Error, sender: Ajax) => void
                                请求完成的回调函数。无论请求是否成功都会执行此回调。  | 
                            
                                function
                             | 
                            
                                 请求完成的回调函数。无论请求是否成功都会执行此回调。  | 
                            
                        
                                
                                ⮞
                                progress
                                : (data: string | Error | Event, internalError?: number) => void = (data: string | Error | Event | undefined, internalError?: number) => {
        const xhr = this.xhr;
        try {
            // 仅当正在发送请求且请求已完成时继续执行。
            if (!this.sending || !internalError && xhr.readyState !== 4) {
                return;
            }
            this.sending = false;
            // 删除 readystatechange 以避免有些浏览器的内存泄露。
            xhr.onreadystatechange = null!;
            // 处理内置错误。
            if (internalError) {
                this.status = internalError;
                if (xhr.readyState !== 4) {
                    xhr.abort();
                }
            } else if (checkStatus(this.status = xhr.status)) {
                try {
                    switch (this.responseType) {
                        case undefined:
                        case "text":
                            this.response = xhr.responseText;
                            break;
                        case "json":
                            this.response = JSON.parse(xhr.responseText);
                            break;
                        case "document":
                            this.response = xhr.responseXML;
                            break;
                        default:
                            this.response = xhr.response;
                            break;
                    }
                    data = undefined;
                } catch (responseError) {
                    // 解析响应数据报错。
                    // IE6-9:请求二进制格式的文件报错。
                    this.status = -6;
                    this.response = undefined;
                    data = responseError;
                }
            } else {
                data = xhr.statusText || "Access denied";
            }
        } catch (firefoxAccessError) {
            this.progress(firefoxAccessError, -5);
            return;
        }
        // 触发回调。
        if (data === undefined) {
            this.success && this.success(this.response, this);
        } else {
            this.error && this.error(data as string | Error, this);
        }
        this.complete && this.complete(data as string | Error, this);
    }
                                (保护的)处理请求状态改变的回调函数。  | 
                            
                                function
                             | 
                            
                                 (保护的)处理请求状态改变的回调函数。  | 
                            
                        
                                
                                ⮞
                                sending
                                : boolean
                                判断是否正在发送请求。  | 
                            
                                boolean
                             | 
                            
                                 判断是否正在发送请求。  | 
                            
                        
| 方法 | 描述 | ||||||||
|---|---|---|---|---|---|---|---|---|---|
                                    
                                    ⮞
                                    getResponseHeader(name)(name:
                                    获取响应头。 
 返回值类型: 返回响应头数据。如果响应头不存在则返回 null。  | 
                                
                                     获取响应头。  | 
                                
                            ||||||||
                                    
                                    ⮞
                                    send()():
                                    发送请求。 返回值类型: 如果请求发送成功则返回 true,否则返回 false。  | 
                                
                                     发送请求。  | 
                                
                            ||||||||
                                    
                                    ⮞
                                    abort()():
                                    终止当前请求。 返回值类型:  | 
                                
                                     终止当前请求。  |