jQuery XML REST Access-Control-Allow-Origin

我正在调用Version One REST API并继续使用XMLHttpRequest cannot load https://www10.v1host.com/... Origin http://localhost:8080 is not allowed by Access-Control-Allow-Origin. javascript错误。 我发送GET请求,预计XML内容将作为响应返回。 这是我的jQuery代码:

 $.ajax({ dataType: "xml", url: "https://www10.v1host.com/...", success: function(data, status, xhr) { alert("Load was performed."); } }); 

我已经更改了dataType: "jsonp ”,并且我得到了这种格式的响应:

 jsonp1294354293197(<Asset ...) 

但是得到另一个javascript错误:“ Uncaught SyntaxError: Unexpected token <

有没有办法如何获取跨域XMLrest数据(类似于XMLp)或为jsonp做一个解决方法(防止解析JSON格式并使用我自己的解析XML)?

你不能做跨域XMLHttpRequest,期间。 至于你自己的解析XML – 只有你可以从服务器获得转义字符串而不是裸XML才有可能。 没有神奇的解析JSON – JSONP技术只是请求另一个脚本动态地将到头部,内部的所有内容都被视为普通的JavaScript。

只要REST API(不是您的服务器)的服务器通过设置CORS(跨源资源共享) HTTP标头允许来自不同来源的请求,例如通过设置“访问控制 – 允许”,就不可能-Origin“响应中的HTTP标头:

 Access-Control-Allow-Origin: * 

要么

 Access-Control-Allow-Origin: http://localhost:8080 

但是,您可以使用Ajax调用自己的服务器,然后使用自己的服务器作为一种代理来调用其他域中的其他服务器,使用合适的解析器解析XML或HTML结果,并给出结果回到客户端:

  client --(Ajax)--> server server --(HTTP)---> Site server <---------- client <---------- 

我知道这是一个老问题,但我认为有一个更好的答案,通过jQuery文档 :

数据类型

多个空格分隔值:从jQuery 1.5开始,jQuery可以将dataType从Content-Type标头中收到的数据转换为您需要的数据类型。 例如,如果要将文本响应视为XML,请对dataType使用“text xml”。 您还可以发出JSONP请求,将其作为文本接收,并由jQuery解释为XML:“jsonp text xml”。 类似地,诸如“jsonp xml”之类的速记字符串将首先尝试从jsonp转换为xml,如果失败,则从jsonp转换为text,然后从text转换为xml。