【问题标题】:Jquery Get json from remote hostJquery 从远程主机获取 json
【发布时间】:2020-04-17 22:25:49
【问题描述】:

您好,我正在尝试使用这段代码从远程主机读取 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失败。

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

【问题讨论】:

  • 除非远程主机添加适当的跨域标头,否则不能。您可以控制远程服务吗?
  • 上面给出的json服务是Drupal rest服务。你能告诉我我应该如何做跨源头。谢谢。
  • REST 是否有 jsonp 输出版本,如果有,请使用它
  • 其余服务返回一个数组
  • 我尝试了 IE 中的代码,我得到 [object Object] [object Object] 任何人都可以帮助我解析 json

标签: javascript jquery cross-domain


【解决方案1】:

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

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

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

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

【讨论】:

  • 您好,我检查了最后一个链接,并确认我的网站已经启用了 CORS。
  • 然后看看JS Console,它告诉你什么?你用的是什么浏览器?
  • 我正在使用 Chrome。是否有任何替代方法可以做到这一点任何 jquery 或 javascript hack。
  • @h_a86 你可以检查你的控制台,如果它给出跨域访问冲突你可以尝试代理服务器如果你使用 php,你可以尝试 curl 为此目的从跨域获取 json 然后传递它感谢您的 jquery。
【解决方案2】:

你有跨域问题,所以你需要使用 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/

【讨论】:

  • 我已经检查过了,但它不起作用。我的网站启用了 CORS。
  • 你得到了什么警报(字段)?
【解决方案3】:

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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2012-03-01
    • 2012-03-22
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-12-03
    • 1970-01-01
    相关资源
    最近更新 更多