6

嗨,我正在尝试使用这段代码从远程主机读取 json。

<!DOCTYPE html>
<html>
<head>
<script src="jquery.js"></script>
<script>
$(document).ready(function(){
$("button").click(function(){
$.getJSON("http://xx.xxx.xxx.xx/rest/user.json",function(result){
  $.each(result, function(i, field){
    $("div").append(field + " ");
      });
    });
  });
});
</script>
</head>
<body>

<button>Get JSON data</button>
<div></div>

</body>
</html>

问题是当我在浏览器中输入 url 时,我会从中获取 json。但是使用上面的jquery方法获取json失败。

有人可以在这方面提供帮助。谢谢

4

3 回答 3

6

我将假设此页面不是从托管 JSON 的站点提供的。

您正在尝试发出跨域请求,大多数(?)浏览器都允许这样做。您遇到了所谓的浏览器同源策略。这是浏览器内置的安全措施。它不允许您向与请求页面不在同一来源的位置发出 XHR 请求。

有几种方法可以解决这个问题:

  1. 使用服务器端代理发出请求
  2. 使用JSONP发出请求(参见 GBD 的回答)
  3. 研究CORS
于 2012-10-20T16:47:13.537 回答
4

你有跨域问题,所以你需要使用 JSONP 所以改变你的 jquery 方法如下

如果 URL 包含字符串“callback=?” (或类似的,由服务器端 API 定义),请求被视为 JSONP。

$.getJSON("http://xx.xxx.xxx.xx/rest/user.json?jsoncallback=?",function(result){
  $.each(result, function(i, field){
    $("div").append(field + " ");
      });
    });

jQuery 手册:http ://api.jquery.com/jQuery.getJSON/

于 2012-10-20T16:47:46.363 回答
0

不允许跨域查询。有关可能的解决方法,请参阅ajax jquery: can't get json/xml from other domain。另一种方法是在同一域上使用代理将本地查询代理到远程主机。

于 2012-10-20T16:47:03.117 回答