无法从远程URL获取Json数据

时间:2014-08-20 16:18:23

标签: jquery json api rest

我正在解决这个问题。我无法从远程REST API获取JSON数据。我需要获取JSOn数据并显示" html_url"我网站上的JSON数据字段。 我看到你需要以下charset和content类型来获取JSON。

        <html>
            <head>
            <meta charset="utf-8">
            <meta http-equiv="content-type" content="application/json">
            </head>


            <body>

            <p>My Instruments page</p>
                <ul></ul>

                <script src="http://ajax.googleapis.com/ajax/libs/jquery/1.3/jquery.min.js"></script>
                <script src="http://ajax.googleapis.com/ajax/libs/jqueryui/1.10.3/jquery-ui.min.js"></script>
               <script type="text/javascript" src="http://code.jquery.com/jquery-1.11.0.min.js"></script>



                    <script type="text/javascript">
            $(document).ready(function () {
                alert("Inside the script");
                $.getJSON(" https://pki.zendesk.com/api/v2/help_center/sections/200268985/articles.json", function (obj) {
                    alert("Inside the getJSON");
                    $.each(obj, function (key, value) {
                        $("ul").append("<li>" + value.html_url + "</li>");
                    });

                });

            });
            </script>
            </body>
           </html> 

我在jsfiddle http://jsfiddle.net/2xTjf/29/上提到了以下示例 &#34; http://date.jsontest.com&#34;在这个例子中给出的也不适用于我的代码。第一个警报是弹出而不是另一个。

我是JSON / Jquery的新手。我使用jsonlint.com查找它是否有有效的JSON,它出来有效。 我也使用chrome REST客户端测试过。 我在这里缺少什么?

2 个答案:

答案 0 :(得分:1)

问题#1:我认为您需要CORS - 在通话前将crossDomain: true添加到$ .ajax或$.support.cors = true;

但是,PKI不支持CORS,因此如果没有代理,则无法执行此操作。 我已经测试了JSONP,并且您提供的URL中的PKI也不支持

问题#2 :您正在加载两个版本的jQuery删除一个并移除UI,直到它无法使用

问题#3 :你的每个人都错了,应该是

$.each(data.articles, function (_,obj) {
  $("ul").append("<li>" + obj["html_url"] + "</li>");
});

JSFIDDLE

完整的脚本看起来像

$(function () {
    $.get("searchproxy.php?url="+encodeURI("https://pki.zendesk.com/api/v2/help_center/sections/200268985/articles.json"),
      function (jsonstring) {
        var data = JSON.parse(jsonstring);
        $.each(data.articles, function (_,obj) {
          $("ul").append("<li>" + obj["html_url"] + "</li>");
        });
    });
});
使用

<?php
$url = $url = $_GET["url"];
$ch = curl_init($url);
curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
$curl_scraped_page = curl_exec($ch);
curl_close($ch);
echo $curl_scraped_page;
?>

LIVE EXAMPLE

答案 1 :(得分:1)

您的浏览器阻止了跨域请求(您可以在浏览器控制台中看到错误)

如果您的远程服务器支持CORS请求,您可以通过在请求json数据之前添加此行来启用jQuery中的CORS: $ .support.cors = true;

请注意,另一方(服务器)也应支持CORS请求(通过添加 Access-Control-Allow-Origin:* 标头为http响应)

编辑: 如果您可以直接访问服务器上的REST API,则可以启用JSON with Padding (JSONP)。它将使代码重用变得更容易。