如何在一个AJAX响应中接收多个二进制值?

时间:2016-04-07 03:50:16

标签: javascript json ajax binaryfiles

目标是发送要从服务器检索的项目列表,该列表查询文件系统或数据库,理想情况下返回二进制文件数组。

我目前的方法是将base64编码二进制文件转换为JSON数组。

// Extend Array class methods to NodeList data type
Object.getOwnPropertyNames( Array.prototype ).forEach( function(method){
  if (method !== 'length')
    NodeList.prototype[method]=Array.prototype[method];
});

// Find People
var nodeList = document.querySelectorAll('div.people');
var people   = nodeList.map(function(el){ return el.dataset.personid; });

// Search Server
var request    = new XMLHttpRequest();
var skip_cache = '?' + new Date().getTime();
request.open('POST', 'cgi.script' + skip_cache );
request.responseType = 'json';
request.onload = function(){
  // response handler
  /* receives json from server, including an array of base64 files for each person 
     loop over array and append base64 values to images (data uri) and prepare other HTML elements 
  */
};
request.send( JSON.stringify({ids:people}) );

瓶颈是请求的大小 - 我已经将人数分成多个请求。虽然base64在未压缩状态下仅增加约37%;当你有1k文件要下载时,它并不重要。

目标是减少每个请求的大小(不牺牲时间),这可以归结为更好的压缩方法(lzma vs gzip),或改进数据格式(ascii上的二进制)。

是否可以一次传输多个二进制文件,甚至可以直接在JSON中嵌入它们而不会产生副作用?作为预防措施,我从未尝试过这种方法,考虑可能会对过去的技术构成挑战的副作用。

0 个答案:

没有答案