尝试使用jQuery来显示JSON文本数据

时间:2009-12-29 14:37:35

标签: javascript jquery json

我知道很少(没有)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,我想显示文本。

任何建议都很受欢迎。

可以在http://api.yelp.com/business_review_search?term=hilton%20metropole&location=B26%203QJ&ywsid=lOoGGbkYpVmTvxHlWGT2Lw

找到JSON

另外,我在同一页面上有多个商家,如何在同一页面上多次使用这些商品,但是将数据输出到不同的位置?

5 个答案:

答案 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>';

希望这会有所帮助......