使用javascript地方库,没有使用nearSearch或textSearch返回“next_page_token”

时间:2018-06-10 19:12:12

标签: javascript google-maps google-maps-api-3 vue.js google-places

我试图通过使用NearbySearch或textSearch迭代结果google返回来捕获特定城市中的所有餐馆。到目前为止,我只能获得前20个结果。我期待在响应中看到一个名为“next_page_token”的参数,我可以发送下一个请求以获取下一组结果,但是,无论我点击哪个API或半径大小,我都不会回来来自谷歌的回复中的“next_page_token”。

我试过在我的回调函数中特意请求“pagetoken”作为回调参数,令我惊讶的是它确实为我提供了pagetoken细节。我尝试将pagetoken.l映射到我的连续请求中的pagetoken但它仍然返回相同的结果集。

我在网上搜索了几个小时,无法解决这个问题。

使用Node和VueJS发出客户端请求。下面的示例代码位于脚本部分中的一个VueJS模板中。 textSearch几乎完全相同,只是我替换了位置&使用关键字执行搜索的查询的半径。

使用NearbySearch的示例

initialize(addressData, placeResults) {
    console.log("Address Data", addressData)
    console.log("Place Results", placeResults)

    this.location = {
        lat: addressData.latitude,
        lng: addressData.longitude
    }

    this.initMap()

},
initMap() {
    console.log("Refs", this.$refs)
    console.log("location", this.location)

    let map = new google.maps.Map(this.$refs.map, {
        center: this.location,
        zoom: 12,
        disableDefaultUI: true,
        scrollwheel: false
    })

    let request = {
        location: this.location,
        radius: 10000,
        type: ['restaurant']      
    }

    let service = new google.maps.places.PlacesService(map)
    service.nearbySearch(request, (results, status, pagetoken) => {
        console.log("Results", results)
        console.log("Status", status)
        console.log("Pagetoken", pagetoken)
        if (pagetoken.hasNextPage) {
            this.hasNextPage = true
            this.pagetoken = pagetoken.l
        }
    })
}

我不会发布结果,因为JSON很长,但结果只包含一系列找到的餐馆而且没有别的。

来自回调的Pagetoken回复

{
  "l": "CqQCHwEAAHGTZMjzfdC-1RcLP8jYBOGy7oUFztGWLSWOCQGAcHe4NgVLfJRl1Yl1GH0G-mju4-A-1fwtDChtmoSQn_qNBIkiK8co2KWy28M3BhV95yvLAswbfTIRwB9wZAev2aaRc3Yd2_nY9dWbFMhv-KppnTGKJj7dYndtj-yyUwV2evznSAE_t5Fcd7OYHmBXPHjSL54jfadw2B96wEx_Ju-5O30J14LlXLkJQZHhCNaD-kb-OAofXVeY5My1-LavHDgdkw49vTeiMou7jU4wB7m47ZSWAB2NChYt5tHLeHPA8n7aCRc40cEzNwpI8T3nwrw8tsuBx9Lbh8mToaUbULBSTzKQzr3DC6v2N4AGDuK4v6A_AdzKZVfhD_GNcM1olyQ2xRIQ0sAvkEOTSJ4ByvjcRXs_uhoUm0CPRm7lHLG593au02QlXTEjeg4",
  "j": 1528657652795,
  "hasNextPage": true
}

1 个答案:

答案 0 :(得分:2)

根据文档,附近搜索的回调函数中的第三个参数是PlaceSearchPagination类型的对象:

https://developers.google.com/maps/documentation/javascript/reference/3/places-service#PlaceSearchPagination

PlaceSearchPagination公开布尔类型和公共方法hasNextPage的公共属性nextPage()以获取下一页结果。

  

nextPage() - 获取下一页结果。使用提供给第一个搜索请求的相同回调函数。

我相信您应该使用以下代码来获取可用的下一页结果

let service = new google.maps.places.PlacesService(map)
service.nearbySearch(request, (results, status, pagetoken) => {
    console.log("Results", results)
    console.log("Status", status)
    console.log("Pagetoken", pagetoken)
    if (pagetoken.hasNextPage) {
        pagetoken.nextPage();
    }
});