【问题标题】:Javascript Cross Domain Web Service CallJavascript 跨域 Web 服务调用
【发布时间】:2011-12-13 08:36:59
【问题描述】:

我正在尝试从 javascript 调用一个返回 XML 文档的 .NET Web 服务。 Web 服务与我的应用程序位于不同的 Web 服务器上。我无法控制 Web 服务。我已经使用 jQuery 将 dataType 设置为 jsonp 成功调用了该服务,我可以看到 XML 文档在 Firebug 中返回。但是,我在 Firebug 控制台“缺少 ; before 语句”中收到一个错误,看起来它正在尝试解析返回的 xml(可能是 json??)。任何想法或调用返回 xml 的跨域 Web 服务的最佳方法是什么?非常感谢!

【问题讨论】:

  • 您不能将 jsonp 与 XML 一起使用。您必须在服务器上使用代理。

标签: javascript ajax jquery


【解决方案1】:

JSON-P 数据格式是一个 JavaScript 程序。如果您使用 JSON-P,那么您返回的数据必须是 JavaScript。

JSON-P 的工作原理是使用 <script> 元素加载文档(这永远不会适用于任意 XML 数据)

您的选择是:

  1. 说服控制 Web 服务的人为您提供 JSON-P 接口
  2. 说服控制 Web 服务的任何人授予您的站点通过 CORS 访问它的权限(注意 limited browser support
  3. 通过您自己的服务器代理 Web 服务,以便您的 JS 在 same origin 上运行

【讨论】:

    【解决方案2】:

    有点像这样:

    $.getJSON("http://yoursite.com/xml2json.php?callback=?", {饲料:“http://agency.nd.edu/agencynd-team.xml”}, 功能(数据){ // 这里处理数据 } }); 13) { $xml = file_get_contents(urldecode($_GET["feed"])); 如果($xml){ $data = @simplexml_load_string($xml, "SimpleXMLElement", LIBXML_NOCDATA); $json = json_encode($data); 回声 isset($_GET["callback"]) ? "{$_GET['callback']}($json)" : $json; } } ?>

    【讨论】:

      【解决方案3】:

      如果您将 dataType 设置为 jsonp,您应该在函数调用中获得响应。例如,如果您希望得到 ​​p>

      object {"key": "value"} 
      

      jsonp 的响应应该是

      parseRespone({"key":"value"});
      

      这样做的原因是 jsonp 将

      如果您无法与服务器的开发人员联系,我建议您对您的页面进行 ajax 调用,该页面将与 .NET 服务器建立 curl 连接并以纯 json 格式检索响应。

      【讨论】:

        【解决方案4】:

        一种可能性是完全避免使用 JSON,而使用 cURL 和 PHP 代理。将数据发送到服务器上的 PHP 脚本,然后该脚本与其他域上的脚本形成 cURL 会话,并将结果返回给原始 AJAX 调用者。

        【讨论】:

          猜你喜欢
          • 2012-02-07
          • 1970-01-01
          • 1970-01-01
          • 2012-09-14
          • 2016-08-04
          • 2013-08-14
          • 2013-05-15
          • 2018-12-25
          • 2015-12-11
          相关资源
          最近更新 更多