0

ここに、ボックス内を検索するときに Google Places オブジェクトを表示するコードがあります。

そう:

function findPlaces(boxes,searchIndex) {
   var request = {
       bounds: boxes[searchIndex],
            types: ["museum"]
   };
   // alert(request.bounds);
   service.nearbySearch(request, function (results, status) {
   if (status != google.maps.places.PlacesServiceStatus.OK) {
     alert("Request["+searchIndex+"] failed: "+status);
     return;
   }
   // alert(results.length);
   document.getElementById('side_bar').innerHTML += "bounds["+searchIndex+"] returns "+results.length+" results<br>"
   for (var i = 0, result; result = results[i]; i++) {
     var marker = createMarker(result);
   }
   searchIndex++;
   if (searchIndex < boxes.length) 
     findPlaces(boxes,searchIndex);
   });
}

しかし、ボックスが空の場合、エラーが発生します。Request[i].failed ZERO_RESULT 最初の質問は、これをジャンプする方法です。次のボックスに移動する方法と、結果がないため、これは単にジャンプする方法です

また、OVER_QUERY_LIMIT を取得することもあります - どうすればこの問題を解決できますか?

更新:私は問題を解決するためにそれらのように試みますが、再び同じです:

function findPlaces(boxes,searchIndex) {
   var request = {
       bounds: boxes[searchIndex],
            types: ["museum"]
   };
   // alert(request.bounds);
   service.nearbySearch(request, function (results, status) {
   if (status != google.maps.places.PlacesServiceStatus.OK) {
//JUMP TO THE NEXT
     searchIndex++;

   }
   // alert(results.length);
   document.getElementById('side_bar').innerHTML += "bounds["+searchIndex+"] returns "+results.length+" results<br>"
   for (var i = 0, result; result = results[i]; i++) {
     var marker = createMarker(result);
   }
//WAIT 3000 TO THE NEW REQUEST
      setTimeout(function () {
    alert('hello');
  }, 3000);
   searchIndex++;
   if (searchIndex < boxes.length) 
     findPlaces(boxes,searchIndex);
   });
}
4

1 に答える 1

0
service.nearbySearch(request, function (results, status) {
    if (status != google.maps.places.PlacesServiceStatus.OK) {
        // you probably don't even need the test for 'ZERO_RESULT' just test
        // your index against the boxes array for more items to search since
        // status could be a different error
        if((status == 'ZERO_RESULT') && (++searchIndex < boxes.length)){
            findPlaces(boxes,searchIndex);
        }else{
            return;
        }
    }else{
        document.getElementById('side_bar').innerHTML += "bounds["+searchIndex+"] returns "+results.length+" results<br>"
        for (var i = 0, result; result = results[i]; i++) {
            var marker = createMarker(result);
        }
        if (++searchIndex < boxes.length) 
            findPlaces(boxes,searchIndex);
    }
});

わかりました。サイドバーにゼロの結果を出力したいとは思いませんでした。この場合、結果には何も表示されないため、ステータス OK を確認する必要はありません。これを試して:

service.nearbySearch(request, function (results, status) {
    document.getElementById('side_bar').innerHTML += "bounds["+searchIndex+"] returns "+results.length+" results<br>"
    for (var i = 0;i<results.length; i++) {
        var marker = createMarker(results[i]);
    }
    if (++searchIndex < boxes.length) 
        setTimeout(findPlaces(boxes,searchIndex),500);
});

編集- たぶんこれ:

service.nearbySearch(request, function (results, status) {
    if(status == 'OVER_QUERY_LIMIT'){
        setTimeout(findPlaces(boxes,searchIndex),1000);
    }else{
        document.getElementById('side_bar').innerHTML += "bounds["+searchIndex+"] returns "+results.length+" results<br>"
        for (var i = 0;i<results.length; i++) {
            var marker = createMarker(results[i]);
        }
        if (++searchIndex < boxes.length) 
            setTimeout(findPlaces(boxes,searchIndex),1000);
    }
});
于 2013-08-31T12:58:39.153 に答える