如何使用Xdomainrequest?试图访问JSON Cross Domain CORS除了IE以外的所有工作



我制作了一些代码,可以访问JSON文件,提取对象并使用jQuery来附加HTML,这是使用CORS完成的。除了8和9。

我读到Xdomainrequest是进行这项工作的方法,但我不知道如何做。任何帮助都将不胜感激。

请不要担心HTML1,Click1等 - 一切都在完整文件中应如何工作。我只需要Xdomainrequest的帮助。

if(window.XDomainRequest){
    var xdr = new XDomainRequest(); 
    xdr.open("get", "[link_to_JSON_on_different_server]");
    xdr.send();
} else {
    $.getJSON("[link_to_JSON_on_different_server]",function(data){
        if (click2){
            var href2 = click2 + encodeURIComponent(data.fuse[0].link);
        }else{
            var href2 = data.fuse[0].link;
        }
        if (click3){
            var href3 = click3 + encodeURIComponent(data.fuse[1].link);
        }else{
            var href3 = data.fuse[1].link;
        }
        $('#title').append('<a href="'+href2+'">'+data.fuse[0].title+'</a>');
        $('#favicon').append('<img style="padding-right:10px;max-width: 16px;" src="http://'+data.fuse[0].domain+'/favicon.ico"> '+data.fuse[0].domain+' ');
        $('#content').append(data.fuse[0].content);
        $('#read').append('<a href="'+href2+'">Read More ></a>');
        $('#title1').append('<a href="'+href3+'">'+data.fuse[1].title+'</a>');
        $('#favicon1').append('<img style="padding-right:10px;max-width: 16px;" src="http://'+data.fuse[1].domain+'/favicon.ico"> '+data.fuse[1].domain+' ');
        $('#content1').append(data.fuse[1].content);
        $('#read1').append('<a href="'+href3+'">Read More ></a>');
    });
}

编辑:

我不能使用JSONP。

我没有错误。我的问题是如何使用XDOMAINREQUEST提取数据,就像我对GetJson一样?

更新的代码:

if(window.XDomainRequest){// 1. Create XDR object: 
var xdr = new XDomainRequest(); 
xdr.onload = function() {
    var responseText = xdr.responseText;
    // TODO handle success response here.
obj = JSON.parse(xdr.responseText);
$('#title').append('<a href="'+href2+'">'+obj.fuse[0].title+'</a>');
alert('success');
};
xdr.onerror = function() {
    // The request has failed.  No specific information will be provided by XDR unfortunately. 
    alert('fail');
};
xdr.open("get", "[link_to_JSON_on_different_server]");
xdr.send();
} else {
            $.getJSON("[link_to_JSON_on_different_server]",function(data){
if (click2){
 var href2 = click2 + encodeURIComponent(data.fuse[0].link);
}else{
var href2 = data.fuse[0].link;
}
if (click3){
 var href3 = click3 + encodeURIComponent(data.fuse[1].link);
}else{
var href3 = data.fuse[1].link;
}
             $('#title').append('<a href="'+href2+'">'+data.fuse[0].title+'</a>');
             $('#favicon').append('<img style="padding-right:10px;max-width: 16px;" src="http://'+data.fuse[0].domain+'/favicon.ico"> '+data.fuse[0].domain+' ');
             $('#content').append(data.fuse[0].content);
             $('#read').append('<a href="'+href2+'">Read More ></a>');
             $('#title1').append('<a href="'+href3+'">'+data.fuse[1].title+'</a>');
             $('#favicon1').append('<img style="padding-right:10px;max-width: 16px;" src="http://'+data.fuse[1].domain+'/favicon.ico"> '+data.fuse[1].domain+' ');
             $('#content1').append(data.fuse[1].content);
             $('#read1').append('<a href="'+href3+'">Read More ></a>');
         });
         }

在使用XDOMAINREQUEST时,似乎您可能不确定如何在服务器响应上获得处理,因为我看到代码中没有错误。正如我在评论中提到的那样,XdomainRequest的API是XMLHTTPRequest提供的子集。因此,要获取响应,您的代码应该看起来像这样:

var xdr = new XDomainRequest(); 
xdr.onload = function() {
    var responseText = xdr.responseText;
    // TODO handle success response here.
};
xdr.onerror = function() {
    // The request has failed.  No specific information will be provided by XDR unfortunately.  
};
xdr.open("get", "[link_to_JSON_on_different_server]");
xdr.send();

XDOMAINREQUEST是使其正常工作的方式。如果您使用的是JQuery 1.5或更高,建议您使用以下脚本。

https://github.com/moonscript/jquery-ajaxtransport-xdomainrequest

此脚本透明地将CORS的支持添加到IE 8和9中的$ .ajax。只需在您的jQuery脚本之后将其放入某个地方并观看它的工作。

jQuery不支持开箱即用的Xdomainrequest(http://bugs.jquery.com/ticket/8283),但是在JQuery 1.5时,您可以定义自定义运输以处理IE 8&amp中的CORS;9。

您可以使用jQuery jquery-transport-xdr来启用 cors cors IE8/9中的请求。

相关内容

  • 没有找到相关文章

最新更新