所以我是一个完整的新手,我正在试图弄清楚如何正确使用json。基本上我问为什么下面代码中的第一个按钮将检索并显示json,而第二个和第三个按钮不会。在浏览器中访问时,所有链接都以我能告诉的相同格式显示,所以我看不出问题所在。
<html>
<head>
<script type="text/javascript" charset="utf-8" src="http://code.jquery.com/jquery-2.0.3.min.js"></script>
<script>
function doJSON1() {
$.getJSON('http://time.jsontest.com/?alloworigin=true', function (data) {
alert(JSON.stringify(data))
});
}
function doJSON2() {
$.getJSON('http://api.vircurex.com/api/get_info_for_1_currency.json?base=DOGE&alt=BTC', function (data) {
alert(JSON.stringify(data))
});
}
function doJSON3() {
$.getJSON('http://pubapi.cryptsy.com/api.php?method=singleorderdata&marketid=132', function (data) {
alert(JSON.stringify(data))
});
}
</script>
</head>
<body>
<h3>Get JSON1</h3>
<button onclick="doJSON1()">Get JSON</button>
<h3>Get JSON2</h3>
<button onclick="doJSON2()">Get JSON</button>
<h3>Get JSON3</h3>
<button onclick="doJSON3()">Get JSON</button>
</body>
</html>
答案 0 :(得分:2)
当javascript不起作用时检查控制台(大多数浏览器为F12),第二个和第三个链接分别抛出错误,如下所示:
XMLHttpRequest cannot load http://api.vircurex.com/api/get_info_for_1_currency.json?base=DOGE&alt=BTC. No 'Access-Control-Allow-Origin' header is present on the requested resource. Origin 'http://fiddle.jshell.net' is therefore not allowed access.
XMLHttpRequest cannot load http://pubapi.cryptsy.com/api.php?method=singleorderdata&marketid=132. No 'Access-Control-Allow-Origin' header is present on the requested resource. Origin 'http://fiddle.jshell.net' is therefore not allowed access.
关于这意味着什么以及如何解决它,另一个stackoverflow答案可能比我更好地解释了它,以及所有精彩的链接资源
最终,如果托管资源的服务器(即您请求的文件)没有响应足够的标头(Access-Control-Allow-Origin就是其中之一),那么您将无法访问资源另一个域名
您确定第二个和第三个不是JSONP API(即您将它们包含为<script>
标记而不是Ajax获取),只需通过读取它看起来好像它们应该是api的URL ,但可能不符合CORS,因此JSONP。
答案 1 :(得分:1)
这是一个跨域问题。大多数浏览器不允许跨域请求来阻止XSS攻击等。有标题允许此权限。
这可能是一个有用的资源:https://developer.mozilla.org/en-US/docs/HTTP/Access_control_CORS
答案 2 :(得分:0)
我发现第二个链接搞砸了,确实让第三个链接起作用我做了以下事情:
1-将主要代码更改为:http://jsfiddle.net/5QM82/6/
<html>
<head>
<script type="text/javascript" charset="utf-8" src="http://code.jquery.com/jquery-2.0.3.min.js"></script>
<script>
function doJSON1() {
$.getJSON('http://time.jsontest.com/?alloworigin=true', function (data) {
alert(JSON.stringify(data))
});
}
function doJSON2() {
$.ajax({
type: 'GET',
url: '/php.php',
dataType: 'JSON',
success: function(data){
alert(JSON.stringify(data));
}
});
}
function doJSON3() {
$.getJSON('http://pubapi.cryptsy.com/api.php?method=singleorderdata&marketid=132', function (data) {
alert(JSON.stringify(data))
});
}
</script>
</head>
<body>
<h3>Get JSON1</h3>
<button onclick="doJSON1()">Get JSON</button>
<h3>Get JSON2</h3>
<button onclick="doJSON2()">Get JSON</button>
<h3>Get JSON3</h3>
<button onclick="doJSON3()">Get JSON</button>
</body>
</html>
2-添加了这个php文件以绕过“No Access Controlled Origin”:
<?php
header('Content-type: application/xml');
echo file_get_contents("http://pubapi.cryptsy.com/api.php?method=singleorderdata&marketid=132");
?>