保誠-保戶業務員媒合平台
HelenHuang
2022-06-09 9bdb95c9e34cef640534e5e5a1e2225a80442000
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
export default function(url, options) {
    options = options || {};
    return new Promise( (resolve, reject) => {
        const request = new XMLHttpRequest();
        const keys = [];
        const all = [];
        const headers = {};
 
        const response = () => ({
            ok: (request.status/100|0) == 2,        // 200-299
            statusText: request.statusText,
            status: request.status,
            url: request.responseURL,
            text: () => Promise.resolve(request.responseText),
            json: () => Promise.resolve(request.responseText).then(JSON.parse),
            blob: () => Promise.resolve(new Blob([request.response])),
            clone: response,
            headers: {
                keys: () => keys,
                entries: () => all,
                get: n => headers[n.toLowerCase()],
                has: n => n.toLowerCase() in headers
            }
        });
 
        request.open(options.method || 'get', url, true);
 
        request.onload = () => {
            request.getAllResponseHeaders().replace(/^(.*?):[^\S\n]*([\s\S]*?)$/gm, (m, key, value) => {
                keys.push(key = key.toLowerCase());
                all.push([key, value]);
                headers[key] = headers[key] ? `${headers[key]},${value}` : value;
            });
            resolve(response());
        };
 
        request.onerror = reject;
 
        request.withCredentials = options.credentials=='include';
 
        for (const i in options.headers) {
            request.setRequestHeader(i, options.headers[i]);
        }
 
        request.send(options.body || null);
    });
}