我有一个rest url 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获取字节数组响应的另一种方法也很受欢迎
答案 0 :(得分:1)
对于多个服务器(具有不同的域),您需要启用CORS以允许跨域ajax请求。它应该是可能的,因为两个服务器都在你的控制之下。
关于如何使用jQuery接收二进制数据(目前无法实现),请参阅http://blog.vjeux.com/2011/javascript/jquery-binary-ajax.html
答案 1 :(得分:0)
CORS是最新的方式,但jsonp可能会更容易......
使用JSONP,您需要在某种脚本中将文件包装在server1上,这样您就可以将内容类型标头设置为javascript,然后对文件进行JSON编码并将其写入响应。这可以在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;}else{tsstr='&'+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。