使用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 响应
rest-assured之获取响应数据(Getting Response Data)