【问题标题】:Javascript XMLHttpRequest.sendAsBinary() support in ChromeChrome 中的 Javascript XMLHttpRequest.sendAsBinary() 支持
【发布时间】:2013-11-03 21:52:23
【问题描述】:

我需要 javascript 中的 sendAsBinary() 函数,但 Chrome 似乎已将其删除。在 Mozilla MDN (https://developer.mozilla.org/en-US/docs/Web/API/XMLHttpRequest) 上,它们提供了一个扩展 XMLHttpRequest 原型的自定义函数:

if(!XMLHttpRequest.prototype.sendAsBinary) {
    XMLHttpRequest.prototype.sendAsBinary = function(sData) {
        console.log("calling sendAsBinary() method...");    
        var nBytes = sData.length, ui8Data = new Uint8Array(nBytes);
        for(var nIdx = 0; nIdx < nBytes; nIdx++) {
            ui8Data[nIdx] = sData.charCodeAt(nIdx) & 0xff;
        }
        this.send(ui8Data);
    };
}

但是,即使我实现了上述内容,我仍然得到:

Uncaught TypeError: Object #<XMLHttpRequest> has no method 'sendAsBinary' 

Chrome 30.0.1599.101。我也从来没有看到我的console.log() 消息。

【问题讨论】:

  • 无法复制。所有后续的 new XMLHttpRequest 对象都有一个 sendAsBinary 方法,正如您指定的那样。铬 30

标签: javascript ajax xmlhttprequest jqxhr


【解决方案1】:

似乎在 Chrome 中您不能使用 sendAsBinary,而是使用 FormData 对象和 send 方法。我假设您要上传文件:

    var file = event.originalEvent.dataTransfer.files[0];
    var dashes = '--';
    var boundary = 'fuhtml5';
    var crlf = '\r\n';
    if (file.getAsBinary) { // Firefox
            var data = dashes + boundary + crlf +
                "Content-Disposition: form-data;" +
                "name=\"" + settings.name + "\";" +
                "filename=\"" + unescape(encodeURIComponent(file.name)) + "\"" + crlf +
                "Content-Type: application/octet-stream" + crlf + crlf +
                file.getAsBinary() + crlf +
                dashes + boundary + dashes;

            xmlHttpRequest.setRequestHeader("Content-Type", "multipart/form-data;boundary=" + boundary);
            xmlHttpRequest.sendAsBinary(data);

        } else if (window.FormData) { // Chrome

            var formData = new FormData();
            formData.append(settings.name, file);

            xmlHttpRequest.send(formData);

        }

这未经测试。它是从https://github.com/MicheleBertoli/jquery-html5-uploader/的代码中提取的

【讨论】:

    猜你喜欢
    • 2015-04-30
    • 2014-12-03
    • 1970-01-01
    • 1970-01-01
    • 2023-03-24
    • 1970-01-01
    • 2016-03-16
    • 2016-05-20
    • 1970-01-01
    相关资源
    最近更新 更多