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

时间:2013-10-13 01:17:14

标签: json jquery rest cross-domain

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

这是我如何通过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);
            }
        });
    }

1 个答案:

答案 0 :(得分:0)

  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变量,但您没有使用它, 如果你想发送它,请添加:

    ,data:{id:id}

  4. 请求应该是这样的:

          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');
             }
          });
        }