Ajax jQuery跨域请求获取JSON响应,无需回调
我正在尝试从此URL检索JSONAjax jQuery跨域请求获取JSON响应,无需回调,ajax,jquery,cross-domain,Ajax,Jquery,Cross Domain,我正在尝试从此URL检索JSON http://www.iheartquotes.com/api/v1/random?format=json 通过jQuery。我知道解决方案是JSONP,但由于我无法控制服务的响应文本或将其包装在自己的回调函数中,因此我的目标是使用客户端脚本以某种方式检索上述URL的响应 我尝试了StackOverflow的几个答案中建议的几乎所有方法。 这些是我尝试过的代码块和得到的响应 一,。返回预期访问控制允许来源错误的直接调用 答复: 无法加载XMLHttpReque
http://www.iheartquotes.com/api/v1/random?format=json
通过jQuery。我知道解决方案是JSONP,但由于我无法控制服务的响应文本或将其包装在自己的回调函数中,因此我的目标是使用客户端脚本以某种方式检索上述URL的响应
我尝试了StackOverflow的几个答案中建议的几乎所有方法。
这些是我尝试过的代码块和得到的响应
一,。返回预期访问控制允许来源错误的直接调用
答复:
无法加载XMLHttpRequest
=1376682146029">http://www.iheartquotes.com/api/v1/random?format=json&=1376682146029.
不允许使用源代码
访问控制允许源
2.添加回调参数的上述代码:
答复:
未捕获的语法错误:意外标记:
请注意,当我点击这个错误时,它会将我带到预期的JSON响应
{"json_class":"Fortune","tags":["simpsons_homer"],"quote":"Holy Moly! The bastard's rich!\n\n\t\t-- Homer Simpson\n\t\t Oh Brother, Where Art Thou?","link":"http://iheartquotes.com/fortune/show/5501","source":"simpsons_homer"}
这也是预期的,因为响应中没有定义回调函数
{"json_class":"Fortune","tags":["simpsons_homer"],"quote":"Holy Moly! The bastard's rich!\n\n\t\t-- Homer Simpson\n\t\t Oh Brother, Where Art Thou?","link":"http://iheartquotes.com/fortune/show/5501","source":"simpsons_homer"}
3.通过jQuery的Ajax方法
答复:
未捕获的语法错误:意外标记:
将回调参数添加到上述函数不会更改响应
{"json_class":"Fortune","tags":["simpsons_homer"],"quote":"Holy Moly! The bastard's rich!\n\n\t\t-- Homer Simpson\n\t\t Oh Brother, Where Art Thou?","link":"http://iheartquotes.com/fortune/show/5501","source":"simpsons_homer"}
专家们有没有关于从URL检索JSON的帮助或建议?我正在使用Chrome开发工具进行测试。我知道我可以从服务器端代码调用该服务,然后将其发送到客户端。但我想看看这是否可以从客户端通过jQuery单独完成
编辑:
根据Kevin B的评论:
使用jQuery的Ajax通过YQL获得了预期的输出。但我的问题仍然是一样的。有没有一种原生的方式通过jQuery实现,因为YQL仍然是一种依赖关系
// Using YQL and JSONP
$.ajax({
url: "http://query.yahooapis.com/v1/public/yql",
// the name of the callback parameter, as specified by the YQL service
jsonp: "callback",
// tell jQuery we're expecting JSONP
dataType: "jsonp",
// tell YQL what we want and that we want JSON
data: {
q: "select * from json where url=\"http://www.iheartquotes.com/api/v1/random?format=json\"",
format: "json"
},
// work with the response
success: function( response ) {
console.log( response.query.results.json ); // server response
}
});
这将给出预期的响应。这不会在所有浏览器中都起作用,但取决于您使用的JQuery版本,请尝试:
{"json_class":"Fortune","tags":["simpsons_homer"],"quote":"Holy Moly! The bastard's rich!\n\n\t\t-- Homer Simpson\n\t\t Oh Brother, Where Art Thou?","link":"http://iheartquotes.com/fortune/show/5501","source":"simpsons_homer"}
$.support.cors = true;
显然,这也取决于服务器响应的标题。如果没有服务器端的干预,这是不可能的。注意,它不一定是您的服务器,google YQL。或者请参阅此处的文章:Hey@KevinB,非常感谢YQL指针。您的建议在某种程度上起到了作用。我已经编辑了我的问题,以包含新代码。喜欢斜体cized'your':整个事件的P键。我认为json中的select*会给您更好的响应,尽管它当然仍然是一个依赖项。
{"json_class":"Fortune","tags":["simpsons_homer"],"quote":"Holy Moly! The bastard's rich!\n\n\t\t-- Homer Simpson\n\t\t Oh Brother, Where Art Thou?","link":"http://iheartquotes.com/fortune/show/5501","source":"simpsons_homer"}