遷移至新版地點評論
透過集合功能整理內容
你可以依據偏好儲存及分類內容。
地點評論可讓你在網頁中加入使用者評論和評分。本頁面說明 Place
類別 (新版) 和 PlacesService
(舊版) 中使用的地點評論差異,並提供一些程式碼片段以供比較。
- 如果要求中指定了
reviews
欄位,PlacesService
(舊版) 會在任何 getDetails()
要求中,傳回 PlaceResult
物件中的 PlaceReview
執行個體陣列。
- 如果要求中指定了
reviews
欄位,Place
(新版) 會在 fetchFields()
要求中傳回 Review
執行個體陣列。
下表列出 Place
類別和 PlacesService
在使用地點評論方面的一些主要差異:
PlacesService (舊版) |
Place (新) |
PlaceReview 介面 |
Review 類別 |
方法需要使用回呼來處理結果物件和 google.maps.places.PlacesServiceStatus 回應。 |
使用 Promise,並以非同步方式運作。 |
方法需要進行 PlacesServiceStatus 檢查。 |
不需要檢查狀態,可使用標準錯誤處理程序。
瞭解詳情。 |
必須使用地圖或 div 元素例項化 PlacesService 。 |
您可以在需要時例項化 Place ,不必參照地圖或網頁元素。 |
PlaceReview 會使用 author_name 、author_url 和 profile_photo_url 欄位,傳回評論的歸因資料。 |
Review 會使用
AuthorAttribution 執行個體,傳回評論的歸因資料。 |
程式碼比較
本節會比較文字搜尋方法的程式碼,說明舊版 PlacesService
和新版 Place
類別中地點評論的差異。
地點服務 (舊版)
下列程式碼片段會呼叫 getDetails()
,要求提供地點詳細資料 (包括評論),並在資訊視窗中顯示第一則評論結果。
const request = {
placeId: "ChIJpyiwa4Zw44kRBQSGWKv4wgA", // Faneuil Hall Marketplace, Boston, MA
fields: ["name", "formatted_address", "geometry", "reviews"],
};
const service = new google.maps.places.PlacesService(map);
service.getDetails(request, (place, status) => {
if (
status === google.maps.places.PlacesServiceStatus.OK &&
place &&
place.geometry &&
place.geometry.location
) {
// If there are any reviews display the first one.
if (place.reviews && place.reviews.length > 0) {
// Get info for the first review.
let reviewRating = place.reviews[0].rating;
let reviewText = place.reviews[0].text;
let authorName = place.reviews[0].author_name;
let authorUri = place.reviews[0].author_url;
// Format the review using HTML.
contentString =`
<div id="title"><b>${place.name}</b></div>
<div id="address">${place.formatted_address}</div>
<a href="${authorUri}" target="_blank">Author: ${authorName}</a>
<div id="rating">Rating: ${reviewRating} stars</div>
<div id="rating"><p>Review: ${reviewText}</p></div>`;
} else {
contentString = `No reviews were found for ${place.name}`;
}
const infowindow = new google.maps.InfoWindow({
content: contentString,
ariaLabel: place.displayName,
});
// Add a marker.
const marker = new google.maps.Marker({
map,
position: place.geometry.location,
});
// Show the info window.
infowindow.open({
anchor: marker,
map,
});
}
});
地點類別 (新)
下列程式碼片段會呼叫 fetchFields()
方法,要求提供地點詳細資料 (包括評論),並在資訊視窗中顯示第一則評論結果。
// Use a place ID to create a new Place instance.
const place = new google.maps.places.Place({
id: "ChIJpyiwa4Zw44kRBQSGWKv4wgA", // Faneuil Hall Marketplace, Boston, MA
});
// Call fetchFields, passing 'reviews' and other needed fields.
await place.fetchFields({
fields: ["displayName", "formattedAddress", "location", "reviews"],
});
// If there are any reviews display the first one.
if (place.reviews && place.reviews.length > 0) {
// Get info for the first review.
let reviewRating = place.reviews[0].rating;
let reviewText = place.reviews[0].text;
let authorName = place.reviews[0].authorAttribution.displayName;
let authorUri = place.reviews[0].authorAttribution.uri;
// Format the review using HTML.
contentString =`
<div id="title"><b>${place.displayName}</b></div>
<div id="address">${place.formattedAddress}</div>
<a href="${authorUri}" target="_blank">Author: ${authorName}</a>
<div id="rating">Rating: ${reviewRating} stars</div>
<div id="rating"><p>Review: ${reviewText}</p></div>`;
} else {
contentString = `No reviews were found for ${place.displayName}`;
}
// Create an infowindow to display the review.
infoWindow = new google.maps.InfoWindow({
content: contentString,
ariaLabel: place.displayName,
});
// Add a marker.
const marker = new google.maps.marker.AdvancedMarkerElement({
map,
position: place.location,
title: place.displayName,
});
// Show the info window.
infoWindow.open({
anchor: marker,
map,
});
除非另有註明,否則本頁面中的內容是採用創用 CC 姓名標示 4.0 授權,程式碼範例則為阿帕契 2.0 授權。詳情請參閱《Google Developers 網站政策》。Java 是 Oracle 和/或其關聯企業的註冊商標。
上次更新時間:2025-08-31 (世界標準時間)。
[null,null,["上次更新時間:2025-08-31 (世界標準時間)。"],[],[],null,["# Migrate to the new Place Reviews\n\n\u003cbr /\u003e\n\n**European Economic Area (EEA) developers** If your billing address is in the European Economic Area, effective on 8 July 2025, the [Google Maps Platform EEA Terms of Service](https://cloud.google.com/terms/maps-platform/eea) will apply to your use of the Services. Functionality varies by region. [Learn more](/maps/comms/eea/faq).\n\nPlace reviews lets you add user reviews and ratings to your web pages. This page\nexplains the differences between place reviews as used in the `Place` class\n(new) and `PlacesService` (legacy), and provides some code snippets for\ncomparison.\n\n- `PlacesService` (legacy) returns an array of [`PlaceReview`](/maps/documentation/javascript/reference/places-service#PlaceReview) instances as part of the `PlaceResult` object for any `getDetails()` request if the `reviews` field is specified in the request.\n- `Place` (new) returns an array of [`Review`](/maps/documentation/javascript/reference/place#Review) instances as part of a `fetchFields()` request if the `reviews` field is specified in the request.\n\nThe following table lists some of the main differences in the use of place\nreviews between the `Place` class and `PlacesService`:\n\n| [`PlacesService`](/maps/documentation/javascript/reference/places-service) (Legacy) | [`Place`](/maps/documentation/javascript/reference/place) (New) |\n|------------------------------------------------------------------------------------------------------------------------------|-------------------------------------------------------------------------------------------------------------------------------------------------------------|\n| [`PlaceReview`](/maps/documentation/javascript/reference/places-service#PlaceReview) interface | [`Review`](/maps/documentation/javascript/reference/place#Review) class |\n| Methods require the use of a callback to handle the results object and `google.maps.places.PlacesServiceStatus` response. | Uses Promises, and works asynchronously. |\n| Methods require a `PlacesServiceStatus` check. | No required status check, can use standard error handling. [Learn more](/maps/documentation/javascript/reference/errors). |\n| `PlacesService` must be instantiated using a map or a div element. | `Place` can be instantiated wherever needed, without a reference to a map or page element. |\n| `PlaceReview` returns attribution data for the review using the `author_name`, `author_url`, and `profile_photo_url` fields. | `Review` returns attribution data for the review using an [`AuthorAttribution`](/maps/documentation/javascript/reference/place#AuthorAttribution) instance. |\n\nCode comparison\n---------------\n\nThis section compares code for text search methods to illustrate the differences\nbetween Place reviews in the legacy `PlacesService` and the newer `Place` class.\n\n### Places service (legacy)\n\nThe following snippet calls `getDetails()` to request place details including\nreviews, and displays the first review result in an infowindow. \n\n const request = {\n placeId: \"ChIJpyiwa4Zw44kRBQSGWKv4wgA\", // Faneuil Hall Marketplace, Boston, MA\n fields: [\"name\", \"formatted_address\", \"geometry\", \"reviews\"],\n };\n const service = new google.maps.places.PlacesService(map);\n\n service.getDetails(request, (place, status) =\u003e {\n if (\n status === google.maps.places.PlacesServiceStatus.OK &&\n place &&\n place.geometry &&\n place.geometry.location\n ) {\n // If there are any reviews display the first one.\n if (place.reviews && place.reviews.length \u003e 0) {\n // Get info for the first review.\n let reviewRating = place.reviews[0].rating;\n let reviewText = place.reviews[0].text;\n let authorName = place.reviews[0].author_name;\n let authorUri = place.reviews[0].author_url;\n\n // Format the review using HTML.\n contentString =`\n \u003cdiv id=\"title\"\u003e\u003cb\u003e${place.name}\u003c/b\u003e\u003c/div\u003e\n \u003cdiv id=\"address\"\u003e${place.formatted_address}\u003c/div\u003e\n \u003ca href=\"${authorUri}\" target=\"_blank\"\u003eAuthor: ${authorName}\u003c/a\u003e\n \u003cdiv id=\"rating\"\u003eRating: ${reviewRating} stars\u003c/div\u003e\n \u003cdiv id=\"rating\"\u003e\u003cp\u003eReview: ${reviewText}\u003c/p\u003e\u003c/div\u003e`;\n } else {\n contentString = `No reviews were found for ${place.name}`;\n }\n\n const infowindow = new google.maps.InfoWindow({\n content: contentString,\n ariaLabel: place.displayName,\n });\n\n // Add a marker.\n const marker = new google.maps.Marker({\n map,\n position: place.geometry.location,\n });\n\n // Show the info window.\n infowindow.open({\n anchor: marker,\n map,\n });\n }\n });\n\n- [`getDetails()` reference](/maps/documentation/javascript/reference/places-service#PlacesService.getDetails)\n- [`PlaceReview` interface reference](/maps/documentation/javascript/reference/places-service#PlaceReview)\n\n### Place class (new)\n\nThe following snippet calls [`fetchFields()`](/maps/documentation/javascript/reference/place#Place.fetchFields)\nmethod to request place details including reviews, and displays the first review\nresult in an infowindow. \n\n // Use a place ID to create a new Place instance.\n const place = new google.maps.places.Place({\n id: \"ChIJpyiwa4Zw44kRBQSGWKv4wgA\", // Faneuil Hall Marketplace, Boston, MA\n });\n\n // Call fetchFields, passing 'reviews' and other needed fields.\n await place.fetchFields({\n fields: [\"displayName\", \"formattedAddress\", \"location\", \"reviews\"],\n });\n\n // If there are any reviews display the first one.\n if (place.reviews && place.reviews.length \u003e 0) {\n // Get info for the first review.\n let reviewRating = place.reviews[0].rating;\n let reviewText = place.reviews[0].text;\n let authorName = place.reviews[0].authorAttribution.displayName;\n let authorUri = place.reviews[0].authorAttribution.uri;\n\n // Format the review using HTML.\n contentString =`\n \u003cdiv id=\"title\"\u003e\u003cb\u003e${place.displayName}\u003c/b\u003e\u003c/div\u003e\n \u003cdiv id=\"address\"\u003e${place.formattedAddress}\u003c/div\u003e\n \u003ca href=\"${authorUri}\" target=\"_blank\"\u003eAuthor: ${authorName}\u003c/a\u003e\n \u003cdiv id=\"rating\"\u003eRating: ${reviewRating} stars\u003c/div\u003e\n \u003cdiv id=\"rating\"\u003e\u003cp\u003eReview: ${reviewText}\u003c/p\u003e\u003c/div\u003e`;\n } else {\n contentString = `No reviews were found for ${place.displayName}`;\n }\n\n // Create an infowindow to display the review.\n infoWindow = new google.maps.InfoWindow({\n content: contentString,\n ariaLabel: place.displayName,\n });\n\n // Add a marker.\n const marker = new google.maps.marker.AdvancedMarkerElement({\n map,\n position: place.location,\n title: place.displayName,\n });\n\n // Show the info window.\n infoWindow.open({\n anchor: marker,\n map,\n });\n\n- [See the example](/maps/documentation/javascript/examples/place-reviews)\n- [See the documentation](/maps/documentation/javascript/place-reviews)\n- [`fetchFields()` reference](/maps/documentation/javascript/reference/place#Place.fetchFields)\n- [`Review` class reference](/maps/documentation/javascript/reference/place#Review)"]]