我知道很少(没有)JavaScript,或者很多关于使用API的知识。但是,我想通过qype.com API在我的网站上显示一些酒店评论。然而,我正在努力管理这个。
这是我到目前为止的代码:
$(document).ready( function() {
$.getJSON( "http://api.yelp.com/business_review_search?term=hilton%20metropole&location=B26%203QJ&ywsid=APIKEY Removed",
function(data) {
$.each( data.businesses, function(i,businesses) {
content = '<p>' + businesses.reviews.text_excerpt + '</p>';
content = '<p>' + businesses.reviews.date + '</p>';
$(content).appendTo("#review");
} );
}
);
} );
我在身体中有一个名为review的div,我想显示文本。
任何建议都很受欢迎。
找到JSON另外,我在同一页面上有多个商家,如何在同一页面上多次使用这些商品,但是将数据输出到不同的位置?
答案 0 :(得分:6)
更新:啊,我现在看到你的错误。 businesses.reviews
是一个数组(每个商家可以有多个审核),因此您必须遍历每个商家和每个商家的评论。
我必须更改一些内容才能让它在我的测试台上运行,但您可以在此处看到此代码的示例:http://bit.ly/4mTxPp
yelp目前支持JSONP来电,因此您可以将代码更改为:
<script src="http://code.jquery.com/jquery-latest.js"></script>
<script>
function showData(data) {
$.each(data.businesses, function(i,business){
// extra loop
$.each(business.reviews, function(i,review){
var content = '<p>' + review.text_excerpt + '</p>';
content += '<p>' +review.date + '</p>';
$(content).appendTo('#review');
});
});
}
$(document).ready(function(){
// note the use of the "callback" parameter
writeScriptTag( "http://api.yelp.com/business_review_search?"+
"term=hilton%20metropole"+
"&location=B26%203QJ"+
"&ywsid=lOoGGbkYpVmTvxHlWGT2Lw"+
"&callback=showData"); // <- callback
});
function writeScriptTag(path) {
var fileref = document.createElement('script');
fileref.setAttribute("type","text/javascript");
fileref.setAttribute("src", path);
document.body.appendChild(fileref);
}
</script>
答案 1 :(得分:2)
您是否在使用此代码时出现Firebug错误?究竟发生了什么?
我预计这个问题是由于您尝试执行不允许的跨域请求而引起的。通常,您需要在后端进行此类数据收集,但您可以使用JSONP等替代方法来执行此操作。
看一下关于这个东西的jQuery documentation,应该清楚发生了什么。
另外,作为附注:在你的回调中你有content =
这是好的但不理想。像这样分配给content
将在全局范围内创建一个您不想要的变量。在这种情况下,它可能不会引起问题但是说你有两个这样的请求同时进行,第二个任务可以轻松地踩到第一个导致难以调试的怪异。最好始终使用var
创建变量。
答案 2 :(得分:1)
如果data.businesses
是一个数组,我会假设data.businesses[x].reviews
也是一个数组。此代码循环业务以及每个业务的评论。它还通过直接附加到content
div来消除#review
变量。
$.each(data.businesses, function(i,business){
$.each(business.reveiws, function(r,review){
$("#review").append(
'<p>' + review.text_excerpt + '</p>'
).append(
'<p>' + review.date + '</p>'
);
});
});
我认为您可以通过添加“callback =?”来使用$.getJSON
方法指定JSONP到url参数。
从jQuery 1.2开始,您可以加载JSON 数据位于另一个域名(如果您) 指定一个JSONP回调,可以是 像这样做:“myurl?callback =?”
$.getJSON("http://api.yelp.com/business_review_search?term=hilton%20metropole&location=B26%203QJ&ywsid=APIKEY Removed&callback=?",
function(data){
...
});
答案 3 :(得分:0)
问题是您正在发出跨域请求,出于安全考虑,不允许这样做。您必须在您的域上制作代理脚本(例如在php中)并从中调用yelp或在服务器端完全获取数据。
答案 4 :(得分:-1)
我认为您必须体验部分数据(您应该看到的)消失。我认为您必须将代码编辑为:
content = '<p>' + businesses.reviews.text_excerpt + '</p>';
content += '<p>' + businesses.reviews.date + '</p>';
希望这会有所帮助......