2014-11-24 126 views
0

我使用此代码发送一个音频文件的请求:的XMLHttpRequest发出的onreadystatechange但不onload事件(使用Dajaxice)

request = new XMLHttpRequest() 
    request.open("get", 'http://localhost:8000'+url, true) 
    request.responseType = "arraybuffer" 

    request.onProgress =()-> 
     console.log 'progress...' 
     return 

    request.onload =()-> 
     console.log 'load...' 
     return 

    request.onerror =()-> 
     console.error 'error' 
     return 

    request.onreadystatechange = (event)-> 
     if request.readyState == 4 
      if request.status == 200 
       console.log "200" 
      else 
       console.log "error" 
     return 

    request.send() 

达到onreadystatechangerequest.readyState == 4request.status == 200,但它从未进入onload回调。

(正因为如此,Howler无法正常工作。)

我使用Django dajaxice。

在服务器端,我使用Django与SocketIOServer,一切似乎确定,它记录:

127.0.0.1 - - [2014-11-24 11:18:26] "GET /static/sounds/space_ship_engine.mp3 HTTP/1.1" 200 689789 0.099860 

(在Chrome 40.0.2214.10测试版(64位),在OS X上的优胜美地10.10.1)

---更新---

我需要request.responseonload回调与audioContext.decodeAudioData()使用(见here),而在onreadystatechange我只有request.responseText

+0

当你有'request.readyState == 4 && request.status == 200'时,为什么你需要'onload'?你不会用这种方式吗? – nnnnnn 2014-11-24 11:38:27

+0

因为Howler.js使用'onload'回调。我需要'request.response'来使用'audioContext.decodeAudioData',而在'onreadystatechange'中我只有'request.responseText'。 – 2014-11-24 11:41:30

回答

0

这是由于dajaxice修改我的XmlHttpRequest。

我设法在加载dajaxice之前将原始的XMLHttpRequest对象保存到变量中(例如window.OriginalXmlHttpRequest = XmlHttpRequest),然后使用我的变量来解析请求。

另一个解决方案是摆脱dajaxice。