jQuery XML REST Access-Control-Allow-Origin

pad*_*dis 8 rest jquery jsonp cross-domain

我正在调用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.");
  }
});
Run Code Online (Sandbox Code Playgroud)

我已经改变了dataType: "jsonp"并且通过这种方式我得到了这种格式的回应:

jsonp1294354293197(<?xml version="1.0" encoding="UTF-8"?><Asset ...</Asset>)
Run Code Online (Sandbox Code Playgroud)

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

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

Mar*_*ota 5

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

  • 这并非严格意义,接受Access-Control-Allow-Origin标头的浏览器将执行跨域请求. (12认同)

0x4*_*672 5

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

Access-Control-Allow-Origin: *
Run Code Online (Sandbox Code Playgroud)

要么

Access-Control-Allow-Origin: http://localhost:8080
Run Code Online (Sandbox Code Playgroud)

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

 client --(Ajax)--> server
                    server --(HTTP)---> Site 
                    server <----------
 client <----------
Run Code Online (Sandbox Code Playgroud)