xe-ajax
Version:
异步请求函数,用于浏览器和 node.js 的 HTTP 客户端
46 lines (36 loc) • 1.29 kB
JavaScript
var utils = require('../core/utils')
var XEResponse = require('./response')
function isNativeResponse (obj) {
return obj && typeof Response !== 'undefined' && obj.constructor === Response
}
function isResponse (obj) {
return obj && obj.constructor === XEResponse
}
function getStringifyBody (reqBody) {
return utils.isStr(reqBody) ? reqBody : JSON.stringify(reqBody)
}
function getResponse (reqBody, resp, request) {
var options = { status: resp.status, statusText: resp.statusText, headers: resp.headers }
if (utils.IS_A) {
reqBody = reqBody instanceof Blob ? reqBody : new Blob([getStringifyBody(reqBody)])
} else {
reqBody = getStringifyBody(reqBody)
}
return new XEResponse(reqBody, options, request)
}
// 将请求结果转为 Respone 对象
function toResponse (resp, request) {
if (isNativeResponse(resp)) {
return request.validateStatus ? resp.text().then(function (text) {
return getResponse(text, resp, request)
}) : Promise.resolve(resp)
}
return Promise.resolve(isResponse(resp) ? resp : getResponse(resp.body, resp, request))
}
var handleExports = {
getResponse: getResponse,
isResponse: isResponse,
toResponse: toResponse
}
module.exports = handleExports