我正在调用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(<?xml version="1.0" encoding="UTF-8"?><Asset ...</Asset>)
但是得到另一个javascript错误:“Uncaught SyntaxError: Unexpected token <
”
有没有办法如何获取跨域XML休息数据(类似于XMLp)或为jsonp做一个变通方法(防止解析JSON格式并使用我自己的解析XML)?
答案 0 :(得分:5)
你不能做跨域XMLHttpRequest,期间。至于你自己的解析XML - 只有你可以从服务器获得转义字符串而不是裸XML才有可能。没有神奇的解析JSON - JSONP技术只是请求另一个脚本动态地将<script src=...>
添加到头部,内部的所有内容都被视为普通的JavaScript。
答案 1 :(得分:5)
只要REST API(不是您的服务器)的服务器通过设置CORS (Cross-Origin Resource Sharing) HTTP标头允许来自不同来源的请求,就不可能,例如通过设置“Access-Control-Allow” -Origin“响应中的HTTP标头:
Access-Control-Allow-Origin: *
或
Access-Control-Allow-Origin: http://localhost:8080
然而,您可以使用Ajax调用自己的服务器,然后使用您自己的服务器作为一种代理来调用其他域中的其他服务器,使用合适的解析器解析XML或HTML结果,并将结果返回给客户:
client --(Ajax)--> server
server --(HTTP)---> Site
server <----------
client <----------
答案 2 :(得分:0)
我知道这是一个老问题,但我认为有一个更好的答案,通过jQuery documentation:
的dataType
多个空格分隔的值:从jQuery 1.5开始,jQuery可以转换 从Content-Type标头中收到的数据类型到什么 你需要。例如,如果您希望将文本响应视为 XML,使用“text xml”作为dataType。你也可以制作一个JSONP 请求,将其作为文本接收,并由jQuery解释为XML: “jsonp text xml。”同样,一个简写字符串,如“jsonp xml” 将首先尝试从jsonp转换为xml,如果失败, 从jsonp转换为文本,然后从text转换为xml。