Renvoyer plusieurs types depuis des lieux Google autocompleteService.getPlacePredictions

J’essaie d’implémenter une interface utilisateur personnalisée pour la saisie semi-automatique de Google Lieux, car celle-ci prédéfinie ne me permet pas de sélectionner manuellement les résultats. Tout fonctionne sans utiliser plusieurs types dans les options de la fonction getPlacePredictions, mais lorsque j’utilise [‘(régions)’, ‘(villes)’], le statut renvoie “demande non valide”.

Est-ce que je fais quelque chose de mal ou est-il impossible de renvoyer plusieurs types?

var _this = this; this.input = $('#zipcode_autocomplete'); this.service = new google.maps.places.AutocompleteService(); this.input.on('input', function() { return _this.service.getPlacePredictions({ input: _this.input.val(), types: ['(regions)', '(cities)'], componentRessortingctions: { country: 'us' } }, _this.callback); }); this.callback = function(predictions, status) { var i, prediction, _results; console.log(predictions); if (status !== google.maps.places.PlacesServiceStatus.OK) { alert(status); return; } i = 0; prediction = void 0; this.results = $('ul.location_results').removeClass('hidden').html(''); _results = []; while (prediction = predictions[i]) { this.results.append("
  • " + prediction.terms[0].value + "" + prediction.terms[prediction.terms.length - 2].value + "
  • "); _results.push(i++); } return _results; };

    Selon l’API “En général, un seul type est autorisé” .

    Si vous deviez essayer d’obtenir les deux types individuellement, vous pourriez utiliser un object différé pour gérer le processus, par exemple:

     // set a new promises array, set the types array var promises = [], types = ['(regions)', '(cities)']; // loop over the types and push the output of getPredications() for each one // into the promises array for (var i = 0, l = types.length; i < l; i++) { promises.push(getPredictions(types[i])); } // when all promises have completed then do something // This uses jQuery's when method which can take an array of // promises when used with apply $.when.apply(null, promises).then(runThisFunction); function getPredictions(type) { // Set up a new deferred object var deferred = new $.Deferred(); // Call the asynchronous function to get the place predictions this.service.getPlacePredictions({ input: _this.input.val(), types: type, componentRestrictions: { country: 'us' } }, function (data) { // Once the data has been returned perhaps do something with data // but definitely resolve the deferred object. deferred.resolve(); }); // return the promise return deferred.promise(); }