2009-12-30 5 views
0

여러 호텔에 대해 yelp.com API에서 호텔 리뷰를 표시 할 웹 페이지가 있습니다.동일한 페이지에 여러 개의 (별도의) JSON 요청을 표시하는 방법

저는 호텔 한 곳에서이 작업을 수행했으며 페이지의 해당 호텔 세부 정보 아래에있는 데이터를 완벽하게 표시합니다. 그러나 어떻게이 과정을 번식하여 각 호텔에 대해 별도의 리뷰를 할 수 있습니까?

내 웹 페이지는 http://dev.bhx-birmingham-airport.co.uk/pages/hotels.php에서 볼 수 있습니다.

내가 지금까지 사용하고 소스 코드는 다음과 같습니다

<script> 
function showData(data) { 
$.each(data.businesses, function(i,business){ 
     // extra loop 
     $.each(business.reviews, function(i,review){ 
      var content = '<p>Review - ' + review.text_excerpt + ' <a href="http://www.yelp.co.uk/biz/hilton-birmingham-metropole-hotel-solihull">Read more...</a></p>'; 
      content += 'Rating - <img src="' + business.rating_img_url + '" />'; 
      content += '<p>Date Added - ' + review.date + '</p>'; 
      $(content).appendTo('#hilton'); 
     }); 
    });  
} 


$(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=[...]"+ 
    "&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

당신은 jQuery의'getScript' 방법으로'writeScriptTag' 기능을 대체 할 수 http://docs.jquery.com/Ajax /jQuery.getScript – SLaks

답변

0

대신 요청 URL과 콜백 함수 이름을 사용하여 페이지에 스크립트 태그를 삽입, 당신은 수동으로 옐프 서비스에 여러 요청을해야한다 .

JQuery와의 간단한 예 :

myhotels 배열이 호텔의 각각의 검색 매개 변수를 포함
function LoadReviews() { 
    for (var i = 0; i < myhotels.length; i++) { 
     $.getJSON("http://api.yelp.com/business_review_search?" + myhotels[i], null, showData); 
    } 
} 

.

+1

콜백 매개 변수를 사용하지 않으면 스크립트가 아닌 JSON 응답을 내 보냅니다. http://api.yelp.com/business_review_search?term=hilton%20metropole&location=B26%203QJ&ywsid=something에 가면 출력이 JSON임을 알 수 있습니다. '& callback = blah'에 태그를 달면 응답을'blah (...) '로 둘러 쌉니다. – Joel

1

귀하의 질문에 다소 불명확합니다.

여러 개의 요청을 Yelp에 보내고 서로 다른 콜백 함수로 처리한다고 가정합니다.

콜백 생성 요청에 대한 정보를 취하여 함수를 반환하는 buildCallback 메서드를 만들어이 작업을 수행 할 수 있습니다.

그런 다음이처럼 callback 매개 변수로 그 함수의 호출을 사용할 수 있습니다 callback=buildCallback('something') 그것은 다음과 같습니다 스크립트 반환합니다

buildCallback('something')({"message: ... }) 

이 코드는 buildCallback 메소드를 호출 후 함수를 호출 buildCallback 메서드가 반환됩니다. 예를 들어

:
이 (각 호텔이 가지고 가정 할 <div class="HotelReviews" id="giveThisToYelp">)

function buildCallback(hotelName) { 
    return function(data) { 
     $.each(data.businesses, function(i,business){ 
      // extra loop 
      $.each(business.reviews, function(i,review){ 
       var content = '<p>Review - ' + review.text_excerpt + ' <a href="http://www.yelp.co.uk/biz/hilton-birmingham-metropole-hotel-solihull">Read more...</a></p>'; 
       content += 'Rating - <img src="' + business.rating_img_url + '" />'; 
       content += '<p>Date Added - ' + review.date + '</p>'; 
       $(content).appendTo('#' + hotelName); 
      }); 
     }); 
    }; 
} 

$(function() { 
    $('.HotelReviews').each(function() { 
     $.getScript("http://api.yelp.com/business_review_search?"+ 
      "term=" + this.id + 
      "&location=B26%203QJ"+ 
      "&ywsid=[...]"+ 
      "&callback=buildCallback(" + this.id + ")" 
     ); 
    }); 
}); 
관련 문제