使用enyo.Ajax接收二进制数据

时间:2014-03-11 06:50:39

标签: ajax xmlhttprequest enyo

我正在尝试使用imagelink下载一个只有一大块二进制数据的图像。下载我使用的是enyo.Ajax模块。它发出警告:“ Ajax请求设置为处理JSON,但数据不是JSON格式”。 以下是我到目前为止所实施的内容。

enyo.kind({
name:"enyo.sample.ajaxapp",
components:[
    {kind:"onyx.Input",name:"urlinput", placeholder:"Input URL",classes:"input"},
    {kind:"onyx.Button",name:"download",ontap:"fetch",classes:"button",content:"Fetch"},
    {kind:"enyo.Control",name:"image",tag:"img",classes:"image"}
],
fetch:function(inSender,inEvent){
    var ajax= new enyo.Ajax({
        url:this.$.urlinput.getValue(),
        handleAs:'blob'
    });
    ajax.go();
    ajax.responseType='blob';
    ajax.response(this,"processResponse");
    ajax.error(this,"errorResponse");
},
processResponse:function(inSender,inResponse){
    var img=this.$.image;
    var blob=inResponse;
    //var data=window.URL.createObjectURL(blob);
    img.setSrc(blob);
},
errorResponse:function(inSender,inResponse){
    console.log("error occured");
}
});

我想知道是否不可能将数据与json / text / xml分开?如果没有,那么我如何修改我的代码以下载它。默认情况下,所有数据都以JSON形式接收,因此我在创建ajax对象时将handleAs设置为bolb。我是否需要更改contentType或其他内容。

1 个答案:

答案 0 :(得分:1)

我认为Ajax不是请求图像数据的最佳方式。你有(至少)两个解决方案:

  1. src标记上设置<img>属性,并使用onload了解 资源下载时。
  2. Base 64编码来自的图像 服务器并将src设置为编码数据加上相应的数据 标题信息。
  3. 有关详细信息,请参阅此问题:Asynchronously load images with jQuery