使用 jQuery 从跨域 Ajax 请求接收 XML 响应

Posted

技术标签:

【中文标题】使用 jQuery 从跨域 Ajax 请求接收 XML 响应【英文标题】:Receive XML response from Cross-Domain Ajax request with jQuery 【发布时间】:2013-03-11 05:58:40 【问题描述】:

我试图向另一个域发出 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);
        
    );

正如我所说,它已经工作了,但问题是服务器返回一个 XML(不是我的服务器,是另一家公司的另一台服务器 - 一个 Web 服务 - 所以我无法更改它返回的内容)并且正如 jsonp 所期望的那样一个 json 它失败并出现错误:

SyntaxError: syntax error
<?xml version="1.0"?><ReceiveMessageResponse xmlns="http://q ... />

根据 jQuery 文档,添加 jsonp text xml 应该会很神奇,将响应转换为简单文本,然后将其解析为 XML,但它不起作用。

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

仅供参考:我正在尝试从 SQS 获取最新消息,所以如果有任何方法告诉它以 json 格式返回数据,它会更容易更好,但我在文档中也没有找到任何东西。 ..

【问题讨论】:

在 jQuery 论坛中有一个帖子说它不起作用 forum-thread 我希望它有所帮助(它已经一岁了,但是......) 谢谢@winner_joiner!我已经看过了。只是我认为这是一个与 jQuery 相关的问题(我的意思是,jQuery 避免我阅读响应)。我调查了一整天,我现在知道我不能这样做,并且它可以与CORS一起使用,但SQS没有它。 S3 有,SQS 没有……无论如何感谢您的帮助。 【参考方案1】:

我的问题的简单答案是:只有两种方法:

    使用代理。我不会把所有的方法都放在这里,但你可以在网上找到很多信息,搜索“cors”、“cross domain ajax requests”和“yql”(最后一个是 Yahoo 的代理)

    使用 CORS。这是Cross-Origin Resource Sharing。即:激活您要从中获取信息的服务器,以将信息发送到任何其他域并回答来自任何其他域的请求。为此,您必须是管理服务器/服务的人。

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

使用 jsonp(Json 填充)。我不会解释这一点(实际上只是额外的信息,因为如果服务器的答案是 XML,它就不起作用 - 我的主要问题),原因是 there is a lot of information on the web。

不幸的是,我无法实现我的目标,因为 SQS 没有配置为任何这些方法......不过,我对跨域请求的工作原理有很多了解。我希望这对任何人都有帮助......

【讨论】:

以上是关于使用 jQuery 从跨域 Ajax 请求接收 XML 响应的主要内容,如果未能解决你的问题,请参考以下文章

如何使用 ajax 从跨域调用 asp.net Web 服务

jQuery ajax 请求因为跨域而被阻止

JQuery的Ajax跨域请求的

jQuery使用ajax跨域请求获取数据

如何在php中检测ajax跨域请求

AjaxAjax全套+跨域Ajax