【问题标题】:How to get a JSON file from another domain using cross domain - javascript?如何使用跨域 - javascript 从另一个域获取 JSON 文件?
【发布时间】:2014-09-09 09:36:19
【问题描述】:

这是我尝试使用的 json 文件: http://www.oref.org.il/WarningMessages/alerts.json 我试图检索大部分时间为空的“数据”数组。

我遇到了一些跨域问题,我收到一条“Access-Control-Allow-Origin”错误消息。

$.ajax({
  url : "http://www.oref.org.il/WarningMessages/alerts.json",
  type : 'GET',
  crossDomain: true,
  data : "json", 
  dataType : "json",
  success : function(res) {
    console.log('res',res);
  }
});

我也尝试了一些 jsonp 方法来获取数据,但没有成功。 有人可以帮我修复我的代码吗?

【问题讨论】:

  • 您至少缺少} 的success 函数。
  • 此外,该站点不支持 JSONP,这是您最不需要的。
  • 你是对的。我没有正确复制代码。那么如何使用 json 检索它呢?

标签: javascript json cross-domain-policy


【解决方案1】:

JSONP 确实是克服XMLHttpRequest 同域策略的简单技巧。 因此,尝试将 dataType 属性的“json”替换为“jsonp”,如下所示:

$.ajax({
    url : "http://www.oref.org.il/WarningMessages/alerts.json",
    type : 'GET',
    crossDomain: true,
    data : "json", 
    dataType : "jsonp",
    success : function(res) {
        console.log('res',res);
    }
});

编辑:

解决方案是服务器(php、java),它检索 json 文件并重新公开它。 然后使用 jquery 脚本从您的服务器检索 json。

示例 php 代码:

header("Content-Type:application/json");
echo file_get_contents("http://www.oref.org.il/WarningMessages/alerts.json");

【讨论】:

  • 这仅在服务器不支持 JSONP 时才有效。
【解决方案2】:

此代码克服了您所面临的错误。 dataType 应该是“jsonp”,以便 Jquery 将其视为 Ajax 请求。 (使用最新版本的 Jquery 2.1.1 测试)

 $.ajax({
         url : "http://www.oref.org.il/WarningMessages/alerts.json",
         type : 'GET',
         crossDomain: true,
         data : "json", 
         dataType : "jsonp",
         success : function(res) {
            console.log('res',res);
         }
      });

【讨论】:

  • 好的,我现在使用最新版本的 jquery 并测试了您的代码。现在我收到一个错误:“Uncaught SyntaxError: Unexpected token:”我该如何克服这个问题?
  • 这仅在服务器不支持 JSONP 时才有效。
  • @Vandervidi,我认为这是一个编码问题。我没有这个问题的答案,但可能将响应的字符编码设置为正确的字符编码可能会解决问题。
  • @Andy,我不确定服务器是否支持 JSONP,但上面的代码确实使用 JSONP 从该 URL 获取数据。我可以看到数据,但由于某些字符编码问题,JSON 解析器无法解析它。
猜你喜欢
  • 2012-10-07
  • 1970-01-01
  • 1970-01-01
  • 2013-05-16
  • 2016-11-23
  • 2018-07-23
  • 2011-12-11
  • 2015-12-19
  • 1970-01-01
相关资源
最近更新 更多