使用Javascript从rest读取字节数组响应

Posted

技术标签:

【中文标题】使用Javascript从rest读取字节数组响应【英文标题】:Reading byte array response from rest using Javascript 【发布时间】:2012-11-28 09:44:24 【问题描述】:

我有一个休息网址http://server1:8080/platform/collections/123-456-789,它以字节数组的形式返回一个 html 文件。

如何使用在 server2 中运行的 javascript 或 jQuery 获取字节数组响应。我试过了

jQuery.ajax(
        url: "http://server1:8080/platform/collections/123-456-789",
        type: "GET",
        dataType: "html",
        crossDomain: true,
        username: "abcd",
        password: "abcd",
        async: true,
        success: function(data) 
            alert("1");
            alert(data);
        ,
        error: function (xhr, ajaxOptions, thrownError) 
            alert("error"+xhr.responseText);
            alert("error"+thrownError);
        
);

我不进入成功方法。如何成功获取字节数组响应?

编辑:

使用 javascript 或 jquery 获取字节数组响应的任何其他方式也值得赞赏

【问题讨论】:

你得到什么错误? @user1784484 请求可能超时。你确定你的服务器端逻辑正常吗? 对于跨域请求,我认为您必须返回 JSONp。 您还可以使用 Firebug(网络选项卡)或 Chrome 开发人员工具来获得有关错误的更详细信息... 我检查了 chrome 开发者工具。我在控制台中收到以下内容 XMLHttpRequest 无法加载“server1:8080/platform/collections/123-456-789”。 Access-Control-Allow-Origin 不允许来源“localhost:7070”。 【参考方案1】:

对于多个服务器(具有不同的域),您需要启用 CORS 以允许跨域 ajax 请求。这应该是可能的,因为两台服务器都在您的控制之下。

关于如何使用 jQuery 接收二进制数据(目前无法实现),请参阅http://blog.vjeux.com/2011/javascript/jquery-binary-ajax.html

【讨论】:

是的,Bergi 你是对的。感谢您的答复。我在 britesnow 中编写了一个 Web 服务,它读取字节响应并给出 json 响应。 jQuery 和二进制是可能的。你可能想看看my answer over here。【参考方案2】:

CORS 是较新的方法,但 jsonp 可能更容易一些...

使用 JSONP,您需要将 server1 上的文件包装在某种脚本中,以便您可以将 content-type 标头设置为 javascript,然后对文件进行 JSONencode 并将其写入响应。这可以在 php 或服务器端 javascript 中用几行代码完成;你会希望脚本最终返回一个包含如下内容的“javascript文件”:

document.getElementById('content-holder').innerHTML="<html>this is my file</html>";

在客户端(从 server2 提供的静态 html 页面)上,您可以放置​​内容持有者:

<div id='content-holder'></div>

然后是从 server1 中提取内容的脚本:

<script type="text/javascript">
var getXsS = function(url)

    var ss = 's' + 'cr' + 'ip' + 't';
    var cst = document.getElementsByTagName(ss)[document.getElementsByTagName(ss).length-1];
    var ts = 1*new Date();
    var e = document.createElement(ss);
    e.async=1;
    var tsstr = '_ts1_='+ts;
    if((''+url).indexOf('?')==-1)tsstr='?'+tsstr;elsetsstr='&'+tsstr;
    var url2 = url+tsstr;
    e.src=url2;
    cst.parentNode.insertBefore(e,cst);
;
getXsS('http://server1:8080/platform/collections/123-456-789');
</script>

请注意,如果 server1 使用 SSL,则 server2 也必须使用 SSL。

【讨论】:

以上是关于使用Javascript从rest读取字节数组响应的主要内容,如果未能解决你的问题,请参考以下文章

从 Rest 服务接收 excel 文件作为 javascript 响应

将字节数组写入文件Javascript

rest-assured之获取响应数据(Getting Response Data)

从 Java AWS lambda API 响应中的字节数组返回图像

从字节数组中读取短

从表面视图读取字节数组?