使用jQuery从Cross-Domain Ajax请求接收XML响应

Cit*_*ito 10 javascript xml jquery jsonp amazon-sqs

我试图向另一个域发出ajax请求,它已经可以工作了,但现在我还有另一个问题......

这是我的代码:

function getChannelMessages(channel) {
    jQuery.support.cors = true;
    $.ajax(channel, {
        cache : true,
        type : "get",
        data : _channels[channel].request,
        global : false,
        dataType : "jsonp text xml",
        jsonp : false,
        success : function jsonpCallback (response) {
            console.log(response);
            updateChannelRequest(channel);
            //getChannelMessages(channel);
        }
    });
}
Run Code Online (Sandbox Code Playgroud)

正如我所说的,它已经工作,但问题是,服务器返回的XML(不是我的服务器,是从另一家公司另一个服务器 - Web服务 - 所以我不能改变什么,它返回),并作为JSONP期待一个JSON它失败并出现错误:

SyntaxError: syntax error
<?xml version="1.0"?><ReceiveMessageResponse xmlns="http://q ... />
Run Code Online (Sandbox Code Playgroud)

根据jQuery文档,添加jsonp text xml应该是魔术,将响应转换为简单文本,然后将其解析为XML,但它不起作用.

我已经能够使用YQL,但它每小时限制10,000个请求,我正在开发的系统每小时将有多达1000万个请求.出于同样的原因,我无法在我自己的服务器中"代理"这些请求......

FYI:我想从SQS最新的消息,所以如果有反正告诉它以将数据返回为JSON,它会更容易,更好,但我还没有找到文档中任何事情要么...

Cit*_*ito 11

对我的问题的简单回答是:只有两种方法可以做到这一点:

  1. 使用代理.我不会把所有的方法都放在这里,但你可以在网上找到很多信息,搜索"cors""跨域ajax请求"和"yql"(这最后是Yahoo的代理)

  2. 使用CORS.这是跨源资源共享.即:激活要从中获取信息的服务器,以将信息发送到任何其他域并回答来自任何其他域的请求.为此,您必须是管理服务器/服务的人.

这两个是从另一个域获取信息XML(或任何其他格式)的唯一方法.要使json跨域请求:

  • 使用jsonp(Json Padded).我不会解释这一点(实际上只是额外的信息,因为如果从服务器的答案是XML,它不会工作-我的主要问题),原因 很多 在网络上的信息.

不幸的是我无法完成我的目标,因为SQS没有配置任何这种方法......但是,我对Cross-Domains请求的工作原理有了很多了解.我希望这有助于任何人......