Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/jquery/73.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Json 无法通过JQuery获取外部API数据_Json_Jquery_Rest_Cross Domain - Fatal编程技术网

Json 无法通过JQuery获取外部API数据

Json 无法通过JQuery获取外部API数据,json,jquery,rest,cross-domain,Json,Jquery,Rest,Cross Domain,我试图通过JQuery获取外部RESTAPI数据,但它返回了未定义的数据。但是当我使用我的本地RESTAPI url时,它是有效的。谁能解释一下问题出在哪里。任何代码样本将不胜感激 这就是我如何通过JQuery访问外部RESTAPI function GetCompanyName(id) { jQuery.support.cors = true; $.ajax({ url: 'http://novacompanysvc.azurewebsi

我试图通过JQuery获取外部RESTAPI数据,但它返回了未定义的数据。但是当我使用我的本地RESTAPI url时,它是有效的。谁能解释一下问题出在哪里。任何代码样本将不胜感激

这就是我如何通过JQuery访问外部RESTAPI

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);
            }
        });
    }
  • 结果是XML,所以您需要设置
    数据类型:“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); 
                      }
    
  • 我试图对此进行测试,但我得到了:
    不被访问控制允许来源
    这是同一来源限制,因此请确保您有权访问此API,否则您将不得不在服务器上使用PHP中的CURL进行访问

  • 您在问题中显示的函数中得到了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');
             }
          });
        }
    

    我看到一个json结果不是JSONP,你能粘贴一个示例代码吗?结果是一个xml,但你必须通过回调获取json才能使其工作…我是Jquery的新手,请参考一些示例代码,以便我了解更多信息。我还在url末尾添加了id,但仍然存在相同的错误。现在查看我编辑的问题。您的更改是错误的,`+id`将创建一个无效的URL,您应该像我向您展示的那样传递变量。另外,正如我在第2篇中所说的,我不想让它工作,因为api页面有一个来源限制,所以如果您不在其范围内或在同一个域中,您将无法使用jquery加载数据。谢谢!但是我们如何访问托管在其他域的Rest api数据呢?从用户端(使用jquery),您可以使用$.get$.post$.ajax向任何页面发送请求,但是您必须了解目标页面应该接受这种类型的请求-“XMLHttpRequest”如果您发布的目标页面也不接受远程请求,您将通过“访问控制允许源…”获得拒绝。假设主机允许用户加载页面,唯一的方法是使用PHP、ASP、,RUBY,无论您需要什么,都可以模拟用户请求并发送正确的标题,这样网页就会认为您是人类用户。在PHP中,您可以使用CURL、file\u get\u contents等。。。现在有意义了吗?