【问题标题】:Not able to get external API data through JQuery无法通过 JQuery 获取外部 API 数据
【发布时间】:2013-10-20 20:58:17
【问题描述】:

我正在尝试通过 JQuery 获取外部 REST API 数据,但它返回未定义。但是当我使用我的本地 REST API url 时,它可以工作。任何人都可以解释什么是问题。任何代码示例将不胜感激。

这就是我通过 JQuery 访问外部 Rest API 的方式。

function GetCompanyName(id) {
        jQuery.support.cors = true;
        $.ajax({
            url: 'http://novacompanysvc.azurewebsites.net/api/companies' + '/' + id,
            type: 'GET',
            dataType: 'jsonp',
            success: function (data) {
                WriteResponse(data);
            },
            error: function (x, y, z) {
                alert("company" +  x + '\n' + y + '\n' + z);
            }
        });
    }

【问题讨论】:

  • 我看到一个 json 结果不是 jsonp
  • 能否粘贴示例代码?
  • 结果是一个xml,但是你必须得到带有回调的json才能让它工作......
  • 我是 Jquery 的新手,请参考一些示例代码,以便我了解更多

标签: json jquery rest cross-domain


【解决方案1】:
  1. 结果是XML所以你需要设置dataType: "text/xml"然后解析它:

                success: function (data) {
                if (window.DOMParser)
                      {
                      parser=new DOMParser();
                      xmlDoc=parser.parseFromString(data,"text/xml");
                      }
                    else // Internet Explorer
                      {
                      xmlDoc=new ActiveXObject("Microsoft.XMLDOM");
                      xmlDoc.async=false;
                      xmlDoc.loadXML(data); 
                      }
    
  2. 我尝试对此进行测试,但得到:is not allowed by Access-Control-Allow-Origin 这是同源限制,因此请确保您有权访问此 API,否则您将不得不在服务器上使用 PHP 中的 CURL 进行此操作。

  3. 您在问题中显示的函数中获得了 id 变量,但您没有使用它, 如果要发送,请添加:

    ,数据:{ id:id }

请求应如下所示:

      function GetCompanyName(id) {
        jQuery.support.cors = true;
        $.ajax({
            url: 'http://novacompanysvc.azurewebsites.net/api/companies',
            type: 'GET',
            data:{ id:id },
            dataType: "text/xml",
        success: function (data) {
           if (window.DOMParser)
              {
              parser=new DOMParser();
              xmlDoc=parser.parseFromString(data,"text/xml");
              }
            else // Internet Explorer
              {
              xmlDoc=new ActiveXObject("Microsoft.XMLDOM");
              xmlDoc.async=false;
              xmlDoc.loadXML(data); 
              }
           WriteResponse(data);
         },
         error: function (x, y, z) {
                alert('error');
         }
      });
    }

【讨论】:

  • 我还在 url 的末尾添加了 id,但仍然是同样的错误。立即查看我编辑的问题。
  • 您的更改是错误的,` +id ` 将创建一个无效的 URL,您应该像我展示的那样传递变量。另外,正如我在第 2 条中所说,我无法让它工作,因为 api 页面有一个来源限制,所以如果你不在它的范围内或在同一个域中,你将无法使用 jquery 加载数据。
  • 谢谢!但是我们如何访问托管在其他域的 Rest api 数据呢?
  • 从用户端(使用jquery)您可以使用$.get $.post $.ajax 向任何页面发送请求,但是您必须了解目标页面应该接受这种类型的请求- “XMLHttpRequest”如果您发布的目标页面也不接受远程请求,您将通过“Access-Control-Allow-Origin...”获得拒绝
  • 假设主机允许用户加载页面的唯一方法是使用 PHP、ASP、RUBY 中的服务器端请求来模拟用户请求并发送正确的标头以便网页会认为你是人类用户。在 PHP 中,您可以使用 CURL、file_get_contents 等……现在有意义吗?
猜你喜欢
  • 1970-01-01
  • 2021-11-30
  • 1970-01-01
  • 1970-01-01
  • 2021-06-10
  • 2021-09-24
  • 1970-01-01
  • 2017-07-06
  • 1970-01-01
相关资源
最近更新 更多