Skip to content
This repository was archived by the owner on Mar 16, 2019. It is now read-only.

Commit 0f43d0d

Browse files
committed
Add check to XMLHttpRequest.send()
Related to #89 , when the request body is a Blob instance, we should check if the Blob is created before the request actually send.
1 parent 1f49693 commit 0f43d0d

File tree

2 files changed

+19
-10
lines changed

2 files changed

+19
-10
lines changed

src/polyfill/Blob.js

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -11,8 +11,8 @@ import EventTarget from './EventTarget'
1111
const log = new Log('Blob')
1212
const blobCacheDir = fs.dirs.DocumentDir + '/RNFetchBlob-blobs/'
1313

14-
// log.disable()
15-
log.level(3)
14+
log.disable()
15+
// log.level(3)
1616

1717
/**
1818
* A RNFetchBlob style Blob polyfill class, this is a Blob which compatible to

src/polyfill/XMLHttpRequest.js

Lines changed: 17 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -130,7 +130,7 @@ export default class XMLHttpRequest extends XMLHttpRequestEventTarget{
130130
* @param {any} body Body in RNfetchblob flavor
131131
*/
132132
send(body) {
133-
133+
this._body = body
134134
if(this._readyState !== XMLHttpRequest.OPENED)
135135
throw 'InvalidStateError : XMLHttpRequest is not opened yet.'
136136
let promise = Promise.resolve()
@@ -141,10 +141,12 @@ export default class XMLHttpRequest extends XMLHttpRequestEventTarget{
141141
log.verbose(typeof body, body instanceof FormData)
142142

143143
if(body instanceof Blob) {
144+
log.debug('sending blob body', body._blobCreated)
144145
promise = new Promise((resolve, reject) => {
145146
body.onCreated((blob) => {
146-
body = RNFetchBlob.wrap(body.getRNFetchBlobRef())
147-
resolve()
147+
log.debug('body created send request')
148+
body = RNFetchBlob.wrap(blob.getRNFetchBlobRef())
149+
resolve()
148150
})
149151
})
150152
}
@@ -158,6 +160,10 @@ export default class XMLHttpRequest extends XMLHttpRequestEventTarget{
158160
}
159161

160162
promise.then(() => {
163+
log.debug('send request invoke', body)
164+
for(let h in _headers) {
165+
_headers[h] = _headers[h].toString()
166+
}
161167
this._task = RNFetchBlob
162168
.config({
163169
auto: true,
@@ -224,10 +230,10 @@ export default class XMLHttpRequest extends XMLHttpRequestEventTarget{
224230
}
225231

226232
getResponseHeader(field:string):string | null {
227-
log.verbose('XMLHttpRequest get header', field)
233+
log.verbose('XMLHttpRequest get header', field, this._responseHeaders)
228234
if(!this._responseHeaders)
229235
return null
230-
return this.responseHeaders[field] || null
236+
return (this._responseHeaders[field] || this._responseHeaders[field.toLowerCase()]) || null
231237

232238
}
233239

@@ -238,9 +244,10 @@ export default class XMLHttpRequest extends XMLHttpRequestEventTarget{
238244
let result = ''
239245
let respHeaders = this.responseHeaders
240246
for(let i in respHeaders) {
241-
result += `${i}:${respHeaders[i]}\r\n`
247+
result += `${i}: ${respHeaders[i]}${String.fromCharCode(0x0D,0x0A)}`
242248
}
243-
return result
249+
console.log('###', result.substr(0, result.length-2))
250+
return result.substr(0, result.length-2)
244251
}
245252

246253
_headerReceived(e) {
@@ -310,9 +317,12 @@ export default class XMLHttpRequest extends XMLHttpRequestEventTarget{
310317
let info = resp.respInfo || {}
311318
switch(info.respType) {
312319
case 'json' :
320+
try{
313321
this._responseText = resp.text()
314322
this._response = resp.json()
315323
responseDataReady()
324+
} catch(err) {
325+
}
316326
break;
317327
case 'blob' :
318328
resp.blob().then((b) => {
@@ -322,7 +332,6 @@ export default class XMLHttpRequest extends XMLHttpRequestEventTarget{
322332
})
323333
break;
324334
default :
325-
console.log(resp, resp.text())
326335
this._responseText = resp.text()
327336
this._response = this.responseText
328337
responseDataReady()

0 commit comments

Comments
 (0)