当前位置: 首页 > 面试题库 >

跨域JSONP XML响应

魏明亮
2023-03-14
问题内容

我正在使用JSONP进行api跨域请求,并且外部服务器以XML返回我的结果,以下是我的代码:

$.ajax({
    type: "Get",
    url: "http://domain.com/function?Data=1234567890",
    xhrFields: {withCredentials: true},
    dataType: "JSONP text xml",
    contentType: "application/xml",
    cache: false,
    success: function(xml)
    {
    alert($(this).find('ResponseStatus').text());
    }
});

它返回给我一个xml,但随之产生一个错误,提示“意外令牌<”,不幸的是停止了我的处理,但我没有收到警告消息。任何想法?

最好


问题答案:

正如上面的评论中提到的那样,除非您能够控制吐出XML的应用程序并可以使用格式化技巧来“欺骗”脚本以将其解析为JSON,否则javascript的跨域xml是不行的。如果您可以这样做,那么问题就必须是为什么不首先将格式设置为JSON?所以…选项

  1. 格式化应用程序的输出以使用JSONP进行处理。假设您无法在这种情况下这样做…
  2. 在您的网络服务器上使用本地代理。PHP,python或任何其他没有跨域限制的语言都提供了许多简单的代理示例。至于页面上的脚本,则是本地AJAX请求。如果你做不到,那…
  3. 一种可能性是使用像yql这样的中介。yql和jquery可以解决许多这些xml问题。当然,不利的一面是您通过无法控制的第三方发送邮件。

像这样:

// find some demo xml - DuckDuckGo is great for this
    var xmlSource = "http://api.duckduckgo.com/?q=StackOverflow&format=xml"

// build the yql query. Could be just a string - I think join makes easier reading
    var yqlURL = [
        "http://query.yahooapis.com/v1/public/yql",
        "?q=" + encodeURIComponent("select * from xml where url='" + xmlSource + "'"),
        "&format=xml&callback=?"
    ].join("");

// Now do the AJAX heavy lifting        
    $.getJSON(yqlURL, function(data){
        xmlContent = $(data.results[0]);
        var Abstract = $(xmlContent).find("Abstract").text();
        console.log(Abstract);
    });

当然,在该示例中,您要带回所有xml数据并在本地进行搜索-该选项可以调整select语句以带回您想要的内容。

希望能有所帮助



 类似资料:
  • 问题内容: 我有一个小问题。 如何为多个域设置Cookie? 我确实了解安全性问题,并且我确信以前已经做过。原因是SSO。 即。 将需要将登录域设置为: domain.com,domain1.com,domain2.com。 有没有简单的方法,可以使用PHP和Cookies或其他替代方法? 问题答案: domain.com绝对没有办法为domain1.com设置cookie。您试图做的事情只能通过

  • 常规网页可以使用 XMLHttpRequest 对象从远程服务器发送和接收数据,但是它们受 same origin 策略的限制。内容脚本已将其注入其中的 Web origin 发起请求,因此,内容脚本也应遵循相同的 same origin 策略。 (自Chrome 73 以来,内容脚本就一直受 CORB 的限制,而 自Chrome 83以来,内容脚本就受 CORS 的限制。)扩展源的限制不是很有效

  • 对于 REST,我们内置了一个跨域 Filter 的支持。 SOFARPC API 使用 对于使用 SOFARPC API 的用户,可以在 ServerConfig 中添加一个参数表明即可 Map<String,String> parameters=new HashMap<String, String>() parameters.put(RpcConstants.ALLOWED_ORIGINS,"

  • 我们先从这么一个问题来引入我们本章节的学习 —— 什么是跨域请求? 1.跨域请求 简单来说,跨域请求就是一个域下的资源请求另外一个域下的资源。 同一个域,指的是,协议名、域名、端口号都一致。 举个例子来说,假如 “http://www.a.com” 下的 JavaScript 脚本发起 Ajax 请求 “http://www.a.com/ajax” ,由于 协议名 http 、域名 www.a.c

  • 同源策略 会阻止 Appium 对和父页面不同域的 iFrame 进行自动化测试。 子域名的解决方案 如果父页面和 iFrame 使用同一个 domain (比如 site.com 和 shop.site.com),你可以在父页面和 iFrame 里将 document.domain 设置为一个共同的domain。这就解决了同源问题。 父页面: <html> <head> <script>

  • 问题内容: 我正在尝试阅读文档,我必须承认这并非易事。我没有问题(添加Access-Control-Allow- Origin标头后)来读取responseText,但是除了Firefox之外,其他任何地方都无法获得响应头。 因此,我的问题是使用跨域Ajax获取响应标头的正确方法是什么? 我尝试使用(Access-Control-Expose- Headers ),但是再次失败,无法读取标头。 问