Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/450.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript jQuery Ajax-下载不完整(二进制)文件_Javascript_Jquery_Ajax - Fatal编程技术网

Javascript jQuery Ajax-下载不完整(二进制)文件

Javascript jQuery Ajax-下载不完整(二进制)文件,javascript,jquery,ajax,Javascript,Jquery,Ajax,这就是我所拥有的: jquery/1.10.2 $.ajax({ url: "http://samplepdf.com/sample.pdf", dataType: "text", data: "", success: function(data) { alert(data.length); }, error: function(a, b, c) {} }); 当我在OSX上的Safari6.0.5中本地运行时,我得到了2113

这就是我所拥有的:

jquery/1.10.2

$.ajax({
    url: "http://samplepdf.com/sample.pdf",
    dataType: "text",
    data: "",
    success: function(data) {
        alert(data.length);
    },
    error: function(a, b, c) {}
});
当我在OSX上的Safari6.0.5中本地运行时,我得到了211300。但是,实际文件似乎是218882字节。使用完全ASCII的东西,例如,它似乎可以正常工作

我不需要下载该文件,而是处理其内容

有没有办法让ajax在客户端或服务器端处理二进制文件而不使用base64?

最糟糕的程序产生的噪音最大! 在这里寻找更好的解决方案

这里演示

在以下设备上进行全面测试: Internet Explorer 6–9 Firefox 11–有理由相信它可以在早期版本上运行 Chrome 17–合理地确定它将在早期版本上工作

备注:需要jQuery 1.3+

更新:

但我没试过

最坏的车轮发出的噪音最大! 在这里寻找更好的解决方案

这里演示

在以下设备上进行全面测试: Internet Explorer 6–9 Firefox 11–有理由相信它可以在早期版本上运行 Chrome 17–合理地确定它将在早期版本上工作

备注:需要jQuery 1.3+

更新:

但我没试过

我认为您需要使用类型化数组。Javascript处理二进制文件的方法。 没有其他方法可以处理纯二进制数据。但是,使用类型化数组,您几乎可以在任何其他地方使用二进制文件执行所有操作

使用Ajax发送类型化数组 资料来源:

使用Jquery 发送:$.ajaxurl,{data:myArray}

接收:未测试

$.ajax('https://dl.dropboxusercontent.com/u/139992952/coffee.png',{
    contentType: "arraybuffer",
    success: function(d){
        var blob = new Blob([d], {type: "image/png"}),
            u = URL.createObjectURL(blob);
    }
});
我认为您需要使用类型化数组。Javascript处理二进制文件的方法。 没有其他方法可以处理纯二进制数据。但是,使用类型化数组,您几乎可以在任何其他地方使用二进制文件执行所有操作

使用Ajax发送类型化数组 资料来源:

使用Jquery 发送:$.ajaxurl,{data:myArray}

接收:未测试

$.ajax('https://dl.dropboxusercontent.com/u/139992952/coffee.png',{
    contentType: "arraybuffer",
    success: function(d){
        var blob = new Blob([d], {type: "image/png"}),
            u = URL.createObjectURL(blob);
    }
});

你有什么理由想做这个客户端而不是服务器端吗?我用它进行客户端加密/解密,所以所有的东西都是二进制的。我使用PDF作为示例,因为它最容易重现错误。您使用的是GET还是POST?您是手动重建HTTPS吗?否则,服务器端是这里唯一安全的方法-客户端代码将很容易破译。必须使用服务器端编码而不是客户端脚本来处理这种情况,其他明智的基本XSS在这里可能是一个问题。你有什么理由想做这个客户端而不是服务器端吗?我用它进行客户端加密/解密,所以所有东西都是二进制的。我使用PDF作为示例,因为它最容易重现错误。您使用的是GET还是POST?您是手动重建HTTPS吗?否则,服务器端是这里唯一安全的方法-客户端代码将很容易破译。这种情况必须使用服务器端编码而不是客户端脚本来处理,其他明智的基本XSS可能是这里的一个问题。谢谢,但我实际上需要处理内容,因为我正在做一些浏览器端加密。我以PDF文件为例,因为它是二进制文件,而jQuery似乎对二进制数据有问题。谢谢,但我实际上需要处理内容,因为我正在进行一些浏览器端加密。我以PDF文件为例,因为它是二进制文件,而jQuery似乎在二进制数据方面存在问题。但是,可以让jQuery以类型化数组的形式发送/接收数据吗?如果是这样的话,怎么做呢?这是一个很好的详细答案,但问题是关于jQuery的——是否可以用jQuery做这些事情,或者必须解析为本机XMLHttpRequest?但是可以让jQuery作为类型化数组发送/接收数据吗?如果是这样的话,怎么做呢?这是一个很好的详细答案,但问题是关于jQuery的——是否可以用jQuery做这些事情,或者必须解决原生XMLHttpRequest?
var oReq = new XMLHttpRequest();
oReq.open("GET", "/myfile.png", true);
oReq.responseType = "arraybuffer";

oReq.onload = function (oEvent) {
  var arrayBuffer = oReq.response; // Note: not oReq.responseText
  if (arrayBuffer) {
    var byteArray = new Uint8Array(arrayBuffer);
    for (var i = 0; i < byteArray.byteLength; i++) {
      // do something with each byte in the array
    }
  }
};

oReq.send(null);
var oReq = new XMLHttpRequest();
oReq.open("GET", "/myfile.png", true);
oReq.responseType = "arraybuffer";

oReq.onload = function(oEvent) {
  var blob = new Blob([oReq.response], {type: "image/png"});
  // ...
};

oReq.send();
$.ajax('https://dl.dropboxusercontent.com/u/139992952/coffee.png',{
    contentType: "arraybuffer",
    success: function(d){
        var blob = new Blob([d], {type: "image/png"}),
            u = URL.createObjectURL(blob);
    }
});