Jquery从远程主机获取json

时间:2012-10-20 16:40:01

标签: javascript jquery cross-domain

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

<!DOCTYPE html>
<html>
<head>
<script src="jquery.js"></script>
<script>
$(document).ready(function(){
$("button").click(function(){
$.getJSON("http://50.116.19.49/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。

有人可以帮助这方面。感谢

3 个答案:

答案 0 :(得分:6)

我认为这个页面不是从托管JSON的网站提供的。

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

有几种解决方法:

  1. 使用服务器端代理发出请求
  2. 使用JSONP发出请求(请参阅GBD的回答)
  3. 查看CORS

答案 1 :(得分:4)

您有跨域问题,因此您需要使用JSONP,因此请更改您的jquery方法,如下所示

  

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

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

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

答案 2 :(得分:0)

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