2014-11-24 128 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。