我正在尝试使用Ajax获取数据。
数据是json。我使用jquery
和angular
。
但结果是未定义或错误。
这是我的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获取数据......
答案 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,请不要使用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:工作。
在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文档中的回调或其他内容。