aozhiwei 0a973d12e3 1
2022-01-27 17:32:21 +08:00

43 lines
985 B
JavaScript

var xhr = require('xhr')
var normalize = require('./normalize-response')
var noop = function () {}
module.exports = xhrRequest
function xhrRequest (opt, cb) {
delete opt.uri
// for better JSON.parse error handling than xhr module
var useJson = false
if (opt.responseType === 'json') {
opt.responseType = 'text'
useJson = true
}
var req = xhr(opt, function xhrRequestResult (err, resp, body) {
if (useJson && !err) {
try {
var text = resp.rawRequest.responseText
body = JSON.parse(text)
} catch (e) {
err = e
}
}
resp = normalize(opt, resp)
if (err) cb(err, null, resp)
else cb(err, body, resp)
cb = noop
})
// Patch abort() so that it also calls the callback, but with an error
var onabort = req.onabort
req.onabort = function () {
var ret = onabort.apply(req, Array.prototype.slice.call(arguments))
cb(new Error('XHR Aborted'))
cb = noop
return ret
}
return req
}