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

Commit d038101

Browse files
committed
Fix XMLHttpRequest so that it compatible to WHATWG-Fetch #106
1 parent 81ff2f6 commit d038101

File tree

3 files changed

+71
-10
lines changed

3 files changed

+71
-10
lines changed

src/polyfill/XMLHttpRequest.js

Lines changed: 2 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -11,7 +11,7 @@ import ProgressEvent from './ProgressEvent.js'
1111
const log = new Log('XMLHttpRequest')
1212

1313
log.disable()
14-
// log.level(2)
14+
// log.level(3)
1515

1616
const UNSENT = 0
1717
const OPENED = 1
@@ -307,6 +307,7 @@ export default class XMLHttpRequest extends XMLHttpRequestEventTarget{
307307
log.debug('XMLHttpRequest done', this._url, resp, this)
308308
this._statusText = this._status
309309
let responseDataReady = () => {
310+
log.debug('request done state = 4')
310311
this.dispatchEvent('load')
311312
this.dispatchEvent('loadend')
312313
this._dispatchReadStateChange(XMLHttpRequest.DONE)
@@ -316,14 +317,6 @@ export default class XMLHttpRequest extends XMLHttpRequestEventTarget{
316317
let info = resp.respInfo || {}
317318
log.debug(this._url, info, info.respType)
318319
switch(info.respType) {
319-
case 'json' :
320-
try{
321-
this._responseText = resp.text()
322-
this._response = resp.json()
323-
responseDataReady()
324-
} catch(err) {
325-
}
326-
break;
327320
case 'blob' :
328321
resp.blob().then((b) => {
329322
this._responseText = resp.text()

src/polyfill/XMLHttpRequestEventTarget.js

Lines changed: 3 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -8,6 +8,7 @@ import Log from '../utils/log.js'
88
const log = new Log('XMLHttpRequestEventTarget')
99

1010
log.disable()
11+
// log.level(3)
1112

1213
export default class XMLHttpRequestEventTarget extends EventTarget {
1314

@@ -25,6 +26,7 @@ export default class XMLHttpRequestEventTarget extends EventTarget {
2526
}
2627

2728
dispatchEvent(event:string, e:Event) {
29+
log.debug('dispatch event', event, e)
2830
super.dispatchEvent(event, e)
2931
switch(event) {
3032
case 'abort' :
@@ -69,7 +71,7 @@ export default class XMLHttpRequestEventTarget extends EventTarget {
6971
}
7072

7173
set onload(fn:(e:Event) => void) {
72-
log.info('set onload')
74+
log.info('set onload', fn)
7375
this._onload = fn
7476
}
7577

test/test-0.9.4.js

Lines changed: 66 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,66 @@
1+
import RNTest from './react-native-testkit/'
2+
import React from 'react'
3+
import RNFetchBlob from 'react-native-fetch-blob'
4+
import {
5+
StyleSheet,
6+
Text,
7+
View,
8+
ScrollView,
9+
Platform,
10+
Dimensions,
11+
Image,
12+
} from 'react-native';
13+
14+
window.XMLHttpRequest = RNFetchBlob.polyfill.XMLHttpRequest
15+
window.Blob = RNFetchBlob.polyfill.Blob
16+
// window.fetch = new RNFetchBlob.polyfill.Fetch({
17+
// auto : true,
18+
// binaryContentTypes : ['image/', 'video/', 'audio/']
19+
// }).build()
20+
21+
const fs = RNFetchBlob.fs
22+
const { Assert, Comparer, Info, prop } = RNTest
23+
const describe = RNTest.config({
24+
group : '0.9.4',
25+
run : true,
26+
expand : true,
27+
timeout : 20000,
28+
})
29+
const { TEST_SERVER_URL, TEST_SERVER_URL_SSL, FILENAME, DROPBOX_TOKEN, styles } = prop()
30+
const dirs = RNFetchBlob.fs.dirs
31+
32+
let prefix = ((Platform.OS === 'android') ? 'file://' : '')
33+
34+
describe('issue #105', (report, done) => {
35+
let tmp = null
36+
RNFetchBlob
37+
.config({ fileCache : true })
38+
.fetch('GET', `${TEST_SERVER_URL}/public/github.png`)
39+
.then((res) => {
40+
tmp = res.path()
41+
return RNFetchBlob.fetch('POST', `${TEST_SERVER_URL}/upload-form`, {
42+
'Content-Type' : 'multipart/form-data'
43+
}, [
44+
{ name : 'data', data : 'issue#105 test' },
45+
{ name : 'file', filename : 'github.png', data : RNFetchBlob.wrap(tmp) }
46+
])
47+
})
48+
.then((res) => {
49+
done()
50+
})
51+
})
52+
53+
describe('issue #106', (report, done) => {
54+
55+
fetch('https://rnfb-test-app.firebaseapp.com/6m-json.json')
56+
.then((res) => {
57+
console.log('##',res)
58+
console.log('## converted')
59+
return res.json()
60+
})
61+
.then((data) => {
62+
console.log(data)
63+
done()
64+
})
65+
66+
})

0 commit comments

Comments
 (0)