从其他站点获取JSON(P)

Get JSON(P) from other site

本文关键字:JSON 获取 其他 站点      更新时间:2023-09-26

我正在尝试使用Ajax获取数据。数据格式为json。我使用jqueryangular

但结果是未定义或错误。

这是我的jquery代码:
$(document).ready(function() {
      var url = "http://market.dota2.net/history/json/";
      $.ajax({
           type: 'GET',
            url: url,
            async: false,
            contentType: "application/json",
            dataType: 'jsonp',
            success: function(data) {
              console.log(data);
            }
        });
    });

在Angular中,我使用jsonp方法。怎么了?

顺便说一下,在纯Java中,我可以从这个url获取数据…

什么错了吗?

您正在尝试调用提供JSON的端点,就像它提供JSONP一样。这行不通;它们是不同的(尽管相关)格式。

示例JSON:

{"foo":"bar"}

JSONP例子:

callback({"foo":"bar"})

注意区别:JSONP实际上是一个JavaScript函数调用,封装在JSON中。

如果API支持JSONP,调用支持它的端点。

如果没有,你不能直接查询它,除非提供者支持跨域资源共享,并与你的源共享,因为同源策略适用于ajax调用。

顺便说一下,在纯Java中,我可以从这个url获取数据…

因为Java代码没有运行在由SOP控制的上下文中,因此可以从该端点获取数据(作为JSON)并使用它。这也是将URL放到浏览器地址栏中让我们看到数据的原因。但是ajax调用有更严格的规则。

如果您希望使用json,请不要使用jsonp,而是使用json

$(document).ready(function() {
      var url = "http://market.dota2.net/history/json/";
      $.ajax({
           type: 'GET',
            url: url,
            async: true, /* it fails with false */
            contentType: "application/json",
            dataType: 'json',/* <== here */
            success: function(data) {
              console.log(data);
            }
        });
    });

你有意识地使用jsonp吗?你知道这是什么吗?如果不是,使用json。或获得有关JSonP的信息:https://en.wikipedia.org/wiki/JSONP


我在Safari上试过了:works.

Chrome &FFox:不工作+错误"Cross Domain Origin"

XMLHttpRequest无法加载http://market.dota2.net/history/json/。请求的资源上没有'Access-Control-Allow-Origin'标头。因此,不允许访问原点'null'。

这意味着你不能用你的客户端/机器从API服务器获取JSon。所以你确实应该使用JSonP,但是…你错过了API文档中的回调或其他东西