Jquery从远程主机获取json

h_h*_*h_h 5 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>
Run Code Online (Sandbox Code Playgroud)

问题是当我在浏览器中键入url时,我从中获取json.但是使用上面的jquery方法无法获得json.

有人可以帮助这方面.谢谢

Jas*_*ean 6

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

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

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

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


GBD*_*GBD 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 + " ");
      });
    });
Run Code Online (Sandbox Code Playgroud)

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