2009-12-29 407 views
1

我知道很少(沒有)JavaScript,或者很少使用API​​。不過,我想通過qype.com API在我的網站上顯示一些酒店評論。不過,我正在努力解決這個問題。試圖使用jQuery來顯示JSON文本數據

這是我到目前爲止的代碼:

$(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"); 
     }); 
    } 
); 
}); 

我在體內被稱爲檢討,我想顯示的文字股利。

任何建議大大收到。

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

也可發現,我已經在同一個頁面上的多個商家,我將如何讓在同一頁上使用這種多次的,但輸出的數據在不同的地方?

+0

現在添加了&callback =?到URL的末尾,我在我的頁面中看到了「undefined」文本。我想這意味着我,而不是指向數據的正確部分。 – 2009-12-29 18:41:04

回答

6

更新:啊,我現在看到你的錯誤。 businesses.reviews是一個數組(每個業務都可以有多個評論),因此您必須循環每個業務和每個業務的評論。

我不得不改變一些事情讓它在我的測試平臺上運行,但你可以看到這個代碼示例運行此:http://bit.ly/4mTxPp

喊叫目前支持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> 
+0

如果Yelp有一個公共的jsonp API來測試某些事情的可行性,那將會很棒。 – Chris 2009-12-29 16:07:47

+0

這似乎已經完成了技巧謝謝。 – 2009-12-29 19:45:17

+0

不錯的腳本 - 你爲什麼寫出腳本標籤?是否有這樣做的好處 – jrutter 2010-07-22 22:58:13

2

你使用這段代碼在Firebug中出錯了嗎?究竟會發生什麼?

我預料到這個問題是由於您嘗試執行不允許的跨域請求而造成的。通常情況下,您需要在後端進行這種數據收集,但您可以使用JSONP等替代方法進行相同的處理。

看看這個東西的jQuery的documentation,它應該清楚發生了什麼。

另外,作爲一個方面說明:在你的回調中,你有content =這是可以的,但並不理想。像這樣分配到content會在全局範圍內創建一個你不想要的變量。在這種情況下,它可能不會導致問題,但說你有兩個這樣的請求一次,第二個任務可以輕鬆地踩在第一個導致難以調試的奇怪。最好總是用var創建變量。

-1

我假設你必須經歷部分數據(你應該看到的)消失。我想你必須編輯您的代碼:

content = '<p>' + businesses.reviews.text_excerpt + '</p>'; 
content += '<p>' + businesses.reviews.date + '</p>'; 

希望這有助於...

0

的問題是,你是一個跨域請求,這是不允許出於安全目的。要麼你將不得不在你的域名上創建一個代理腳本(比如在php中),並從中調用yelp或者在服務器端完全獲取數據。

+0

跨域不是問題。 – 2009-12-29 23:05:44

1

如果data.businesses是一個數組,我會認爲data.businesses[x].reviews也是一個數組。此代碼循環業務以及每個業務的評論。它也通過直接附加到#review div來擺脫content變量。

$.each(data.businesses, function(i,business){ 
    $.each(business.reveiws, function(r,review){ 
     $("#review").append(
     '<p>' + review.text_excerpt + '</p>' 
     ).append(
     '<p>' + review.date + '</p>' 
     ); 
    }); 
}); 

我認爲你可以指定JSONP與你的$.getJSON方法加入「callback =?」到url參數。

在jQuery 1.2中,你可以加載JSON位於另一個域 數據,如果你 指定了JSONP回調,可以 做到像這樣:「myurl回調=?」

$.getJSON("http://api.yelp.com/business_review_search?term=hilton%20metropole&location=B26%203QJ&ywsid=APIKEY Removed&callback=?", 
    function(data){ 
    ... 
});