我正在解决这个问题。我无法从远程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客户端测试过。 我在这里缺少什么?
答案 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>");
});
完整的脚本看起来像
$(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;
?>
答案 1 :(得分:1)
您的浏览器阻止了跨域请求(您可以在浏览器控制台中看到错误)
如果您的远程服务器支持CORS请求,您可以通过在请求json数据之前添加此行来启用jQuery中的CORS: $ .support.cors = true;
请注意,另一方(服务器)也应支持CORS请求(通过添加 Access-Control-Allow-Origin:* 标头为http响应)
编辑: 如果您可以直接访问服务器上的REST API,则可以启用JSON with Padding (JSONP)。它将使代码重用变得更容易。