XMLHttpRequest发出onreadystatechange但不发出onload事件(使用Dajaxice)

时间:2014-11-24 11:35:01

标签: javascript django xmlhttprequest 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 == 4达到request.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 beta(64位)上,在OS X Yosemite 10.10.1上)

---更新---

我需要request.response回调中的onloadaudioContext.decodeAudioData()一起使用(请参阅here),而在onreadystatechange我只有request.responseText

1 个答案:

答案 0 :(得分:0)

这是由于dajaxice修改了我的XmlHttpRequest。

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

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