正如标题所说我试图从网站给出的api中检索json。我现在尝试了各种各样的东西,并得到了不同的结果。我希望能够检索并解析json以获取我想要的信息。这是我尝试过的:
1)$ .ajax() 代码块(单击按钮时运行):
$.ajax({
type: 'GET',
url: url,
dataType: 'json',
success: function(data) {
alert('Success!');
}
});
这会产生“Access-Control-Allow-Origin不允许使用Origin null”。错误,并没有得到服务器的响应(对于Chrome或FF,我不关心IE,因为这是一个供我使用的小项目)。 Looking around我认为问题可能是我需要它成为jsonp dataType,因为我正在尝试连接到外部网站。这导致我尝试#2
2)$ .ajax with jsonp dataType
$.ajax({
type: 'GET',
url: url,
dataType: 'jsonp',
success: function(data) {
alert('Success!');
}
});
我还附加了“& callback =?”到了我给函数的“url”的结尾。使用Chrom的开发工具这次我可以看到来自服务器的响应,但警报从不显示。我使用JSONLINT来确认响应是一个正确的json(它是)并且我已经尝试将json设置为变量以便我可以使用它(沿着在脚本标记中早期初始化变量的行[var response;并尝试将json分配给它[response = data;])。当我试图提醒(响应)时,这产生了未定义;后来(我不相信响应= json;因为某些原因而被调用过)。
我也尝试过使用$ .getJSON,但是看看api它显然只是运行了$ .ajax(幸运的是,当尝试使用json vs jsonp for $ .getJSON时我得到了相同的响应/错误$阿贾克斯)。当我尝试作为jsonp Chrome(FF不会产生此错误)时显示“意外的语法错误:意外的令牌:”。 This让我觉得我正在尝试与之交谈的网站没有jsonp工作,我无法访问第三方网站只是一个json请求。该链接讨论了如何将服务器设置为application / json而不是text / html,就像我从我的响应中获得的那样,为他们修复了问题(但是,我再次尝试访问第三方网站,因此我可以不要访问服务器。
我在Chrome和FF中尝试了这个并且看了Dev Tools / Firebug的每一个并且看到了同样的事情(尽管FF不会产生原始错误,但这显然是Chrome的一个错误)。
另外:我已经将json响应返回并在其上运行$ .parseJSON并且能够获取各种部分,但是一旦我获得$ .ajax / $。getJSON工作,我怎样才能访问json?
非常感谢任何想法/解决方案。
答案 0 :(得分:0)
我曾经遇到Unexpected Syntax Error: Unexpected token :
错误。
该网站似乎不支持跨域加载。 你想用什么API?
答案 1 :(得分:0)
响应很可能是有效的JSON,但不是有效的JSONP。第三方服务器必须支持JSONP才能获得JSONP响应。如果您无法控制第三方服务器,那么您唯一真正的选择是使用服务器端代理或YQL。
答案 2 :(得分:0)
不要将JQuery AJAX用于JSONP。
使用<script type='text/javascript' src=' URL_GOES_HERE&callback=BLAH '></script>
通过javascript方法调用围绕json对象,然后您可以使用第三方来源的数据。
答案 3 :(得分:0)
试试JSONP插件。它是我推荐的为数不多的插件之一,只是因为它很轻,并且做到了它应该做的事情。它还允许您检查除成功之外的响应。适用于JSONP,并解决了使用子域而没有得到正确错误响应(后来只是暂停代码)的问题。
答案 4 :(得分:0)
你尝试过这种方式吗?
$.getJSON( url + "?callback=?", function(data) {
console.info(JSON.stringify(data, null, 2));
});
这基本上是我管理JSONP回调到http://freegeoip.net/json/
的方式