用于 json 和 jsonp 的 $.ajax 和 $.getJSON 无法正确获取来自第三方服务器的响应
$.ajax and $.getJSON for json and jsonp fail to properly get response from 3rd party server
正如标题所说,我正在尝试从站点提供的 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,因为这是一个供我使用的小项目)。环顾四周,我认为问题可能是我需要它是jsonp数据类型,因为我正在尝试连接到外部网站。这导致我尝试#2
2) $.ajax with jsonp dataType
$.ajax({
type: 'GET',
url: url,
dataType: 'jsonp',
success: function(data) {
alert('Success!');
}
});
我还在我给函数的"url"末尾附加了"&callback=?"。使用 Chrom 的开发工具,我这次可以看到来自服务器的响应,但警报永远不会显示。我使用 JSONLINT 来确认响应是正确的 json(确实如此),并且我尝试将 json 设置为变量,以便我可以使用它(沿着脚本标签 [var response;] 中较早初始化变量并尝试将 json 分配给它[响应 = data;])。当我尝试警报(响应)时,这产生了未定义;后来(我不相信响应=json;由于某种原因,bit曾经被调用过)。
我也尝试过使用 $.getJSON,但查看它的 api 显然只是运行 $.ajax(幸运的是,我在尝试 json 与 jsonp 为 $.getJSON 时得到了与尝试 $.ajax 时相同的响应/错误)。当我尝试作为 jsonp Chrome(FF 不会产生此错误)时,显示"意外语法错误:意外令牌:"。这让我认为我尝试与之交谈的网站没有 jsonp 工作,我无法访问第三方网站,只是 json 请求。该链接讨论了如何将服务器设置为以应用程序/json 而不是文本/html 返回,就像我从我的响应中得到的那样,为他们解决了问题(但同样,我正在尝试访问第三方站点,因此我无法访问服务器)。
我已经在Chrome和FF中尝试过这个,并查看了每个Dev Tools/Firebug并看到了同样的事情(尽管FF不会产生原始错误,但这显然是Chrome的错误)。
另外:我已经获取了返回的 json 响应并在其上运行 $.parseJSON 并能够抓取各种部分,但是一旦我让 $.ajax/$.getJSON 工作,我如何访问 json?
任何想法/解决方案将不胜感激。
我也曾经遇到过Unexpected Syntax Error: Unexpected token :
错误。
似乎不支持跨域加载。您尝试使用什么 API?
响应很可能是有效的 JSON,但不是有效的 JSONP。第三方服务器必须支持 JSONP,您才能获得 JSONP 响应。如果您无法控制第三方服务器,则唯一真正的选择是使用服务器端代理或YQL。
不要将 JQuery AJAX 用于 JSONP。
使用 <script type='text/javascript' src=' URL_GOES_HERE&callback=BLAH '></script>
它将用 javascript 方法调用包围 json 对象,然后您可以使用来自第三方源的数据。
http://en.wikipedia.org/wiki/JSONP
尝试使用 JSONP 插件。这是我推荐的为数不多的插件之一,只是因为它很轻,可以做它应该做的事情。它还允许您检查成功以外的响应。适用于 JSONP,并解决了我在使用子域时遇到的问题,并且没有得到正确的错误响应(随后只是停止了代码)。
在这里获取。
你试过这种方式吗?
$.getJSON( url + "?callback=?", function(data) {
console.info(JSON.stringify(data, null, 2));
});
这基本上就是我管理对 http://freegeoip.net/json/的 JSONP 回调的方式
- 使用 jQuery 的 .on 函数如何获取事件的原始元素
- jquery试图按名称获取按钮位置
- 如何在jQuery中获取元素的形式
- 如何在php文件中获取$.post-ajax传递的值
- 在Shopify中获取博客文章的图片
- 使用Javascript获取所选选项ID
- 在jQuery中获取表的行索引
- 使用jquery将mysql数据获取到新的表行中
- 在动态创建的元素上获取对特定选择器的引用
- 从城市名称获取惊喜
- Angular只从数组中获取所需的数据
- 在JS中获取当前IP(无第三方服务)
- 与杜兰达尔合作的第一个JavaScript项目.尝试从第三方 API 获取数据
- 从 HTML 页面中的第三方响应数据中获取单个值
- AngularJS服务初始化并获取第三方组件
- 用于 json 和 jsonp 的 $.ajax 和 $.getJSON 无法正确获取来自第三方服务器的响应
- 获取访问者位置 (IP),而无需使用第三方库
- 通过第三方web服务获取客户端IP地址
- 如何从第三方网站获取一些价值并将其发布在我的网站上
- 如何使用jsonp或jquery.getjson获取第三方域的json响应