从其他网站

时间:2015-07-31 09:24:29

标签: javascript jquery json angularjs jsonp

我正在尝试使用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获取数据......

2 个答案:

答案 0 :(得分:4)

  

怎么了?

您尝试调用提供JSON的端点,就好像它提供了JSONP一样。那不会起作用;它们是不同的(虽然相关)格式。

示例JSON

{"foo":"bar"}

示例JSONP

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

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

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

如果没有,除非提供商支持Cross-Origin Resource Sharing并与您的来源共享,否则您无法直接查询,因为Same Origin Policy适用于ajax调用。

  

顺便说一句,在纯Java中我可以从这个URL获取数据......

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

答案 1 :(得分:0)

如果你期望json,请不要使用jsonpjson

$(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:工作。

在Chrome&amp; FFox:不起作用+ Erreur&#34; Cross Domain Origin&#34;

  

XMLHttpRequest无法加载http://market.dota2.net/history/json/。 No&#39; Access-Control-Allow-Origin&#39;标头出现在请求的资源上。起源&#39; null&#39;因此不允许访问。

这意味着你无法从API服务器获得带有客户端/机器的JSon。所以你确实应该使用JSonP,但是......你会错过API文档中的回调或其他内容。