使用Javascript从休息中读取字节数组响应

时间:2012-11-28 09:44:24

标签: javascript jquery restful-url

我有一个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获取字节数组响应的另一种方法也很受欢迎

2 个答案:

答案 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。