diff --git a/package.json b/package.json index ea08754..09701a9 100644 --- a/package.json +++ b/package.json @@ -1,8 +1,8 @@ { "name": "@bytedo/fetch", - "version": "2.1.6", + "version": "2.1.7", "description": "全新的ajax封装。分2个版本, 一个基于XMLHttpRequest, 一个基于window.fetch", - "main": "dist/index.js", + "main": "dist/next.js", "files": [ "dist/*" ], diff --git a/src/index.js b/src/index.js index 20d2eee..63e9000 100644 --- a/src/index.js +++ b/src/index.js @@ -25,7 +25,7 @@ const ERRORS = { } Promise.defer = function () { - var _ = {} + let _ = {} _.promise = new Promise(function (y, n) { _.resolve = y _.reject = n @@ -66,7 +66,7 @@ class _Request { } if (!options.signal) { - var control = new AbortController() + let control = new AbortController() options.signal = control.signal } this.defer.promise.abort = function () { @@ -90,10 +90,10 @@ class _Request { } __next__() { - var options = this.options - var params = null - var hasAttach = false // 是否有附件 - var noBody = NOBODY_METHODS.includes(options.method) + let options = this.options + let params = null + let hasAttach = false // 是否有附件 + let noBody = NOBODY_METHODS.includes(options.method) /* ------------------------ 1»» 处理signal ---------------------- */ options.signal.onabort = _ => { @@ -103,7 +103,7 @@ class _Request { /* -------------------------- 2»» 请求的内容 --------------------- */ if (options.body) { - var type = typeof options.body + let type = typeof options.body switch (type) { case 'number': case 'string': @@ -111,6 +111,11 @@ class _Request { params = options.body break case 'object': + let _type = getType(options.body) + + if (_type === 'ArrayBuffer' || _type === 'Uint8Array') { + break + } // 解析表单DOM if (options.body.nodeName === 'FORM') { options.method = options.body.method.toUpperCase() || 'POST' @@ -181,16 +186,17 @@ class _Request { if (noBody) { params = Format.param(params) if (params) { - options.url += (~options.url.indexOf('?') ? '&' : '?') + params + options.url += (options.url.includes('?') ? '&' : '?') + params } if (options.cache === 'no-store') { - options.url += (~options.url.indexOf('?') ? '&' : '?') + '_t_=' + Date.now() + options.url += (options.url.includes('?') ? '&' : '?') + '_t_=' + Date.now() } } else { if (options.body && !hasAttach) { - if (~options.headers['content-type'].indexOf('json')) { + if (options.headers['content-type'].includes('json')) { params = JSON.stringify(params) - } else { + } + if (options.headers['content-type'].includes('form')) { params = Format.param(params) } } @@ -288,9 +294,9 @@ class _Request { } __success__(isSucc, result) { - var { body, status, statusText, headers } = result - var response = new Response(body, { status, statusText, headers }) - var _type + let { body, status, statusText, headers } = result + let response = new Response(body, { status, statusText, headers }) + let _type if (this._owner._inject_res) { response = this._owner._inject_res(response) @@ -312,7 +318,7 @@ class _Request { } __cancel__(result) { - var response = new Response('', { + let response = new Response('', { status: 0, statusText: ERRORS[10100] }) @@ -325,7 +331,7 @@ class _Request { } __timeout__(result) { - var response = new Response('', { + let response = new Response('', { status: 504, statusText: ERRORS[10504] }) @@ -353,7 +359,7 @@ const _fetch = function (url, options) { } _fetch.create = function () { - var another = function (url, options) { + let another = function (url, options) { return new _Request(url, options, another) } inject(another) diff --git a/src/lib/format.js b/src/lib/format.js index 7a5d862..90a603d 100644 --- a/src/lib/format.js +++ b/src/lib/format.js @@ -15,7 +15,7 @@ export function getType(val) { * 表单序列化 */ function serialize(p, obj, query) { - var k + let k if (Array.isArray(obj)) { obj.forEach(function (it, i) { k = p ? `${p}[${Array.isArray(it) ? i : ''}]` : i diff --git a/src/next.js b/src/next.js index fa9edf0..c502f67 100644 --- a/src/next.js +++ b/src/next.js @@ -75,19 +75,25 @@ class _Request { } __next__() { - var options = this.options - var hasAttach = false // 是否有附件 - var noBody = NOBODY_METHODS.includes(options.method) + let options = this.options + let hasAttach = false // 是否有附件 + let noBody = NOBODY_METHODS.includes(options.method) /* -------------------------- 1»» 请求的内容 --------------------- */ if (options.body) { - var type = typeof options.body + let type = typeof options.body switch (type) { case 'number': case 'string': this.__type__('text') break case 'object': + let _type = getType(options.body) + + if (_type === 'ArrayBuffer' || _type === 'Uint8Array') { + break + } + // 解析表单DOM if (options.body.nodeName === 'FORM') { options.method = options.body.method.toUpperCase() || 'POST' @@ -142,14 +148,14 @@ class _Request { if (noBody) { let tmp = Format.param(options.body) if (tmp) { - options.url += (~options.url.indexOf('?') ? '&' : '?') + tmp + options.url += (options.url.includes('?') ? '&' : '?') + tmp } delete options.body } else { if (options.body && !hasAttach) { - if (~options.headers['content-type'].indexOf('json')) { + if (options.headers['content-type'].includes('json')) { options.body = JSON.stringify(options.body) - } else { + } else if (options.headers['content-type'].includes('form')) { options.body = Format.param(options.body) } } @@ -165,7 +171,7 @@ class _Request { } /* ----------------- 5»» 构造请求 ------------------- */ - var url = options.url + let url = options.url delete options.url for (let k in options) { if (options[k] === null || options[k] === undefined || options[k] === '') { @@ -222,7 +228,7 @@ const _fetch = function (url, options) { } _fetch.create = function () { - var another = function (url, options) { + let another = function (url, options) { return new _Request(url, options, another) } inject(another)