API Google Place-aucun en-tête 'Access-Control-Allow-Origin' n'est présent sur la ressource demandée. Origine 'null' est donc pas autorisé à accéder

J'utilise L'API Google Place.

Ce que je veux obtenir une suggestion de place pour le type d'aide.

Donc, ce que j'ai fait est-

var Google_Places_API_KEY = "AIzaSyAK08OEC-B2kSyWfSdeCzdIkVnT44bcBwM";      //Get it from - https://code.google.com/apis/console/?noredirect#project:647731786600:access
var language = "en";        //'en' for English, 'nl' for Nederland's Language


var Auto_Complete_Link = "https://maps.googleapis.com/maps/api/place/autocomplete/json?key="+Google_Places_API_KEY+"&types=geocode&language="+language+"&input=Khu";
$.getJSON(Auto_Complete_Link , function(result)
{
    $.each(result, function(i, field)
    {
        //$("div").append(field + " ");
        //alert(i + "=="+ field);
        console.error(i + "=="+ field);
    });
});

Donc, dans quel lien je demande est -

Https://maps.googleapis.com/maps/api/place/autocomplete/json?key=AIzaSyAK08OEC-B2kSyWfSdeCzdIkVnT44bcBwM&types=geocode&language=en&input=Khu

Et si je vais à ce lien avec le navigateur, je peux obtenir une sortie comme ça (veuillez essayer de ck) -

11

Mais si j'essaie avec jQuery .getJSON ou .ajax , je reçois ma demande bloquée avec ce message -

222.

Donc, le XMLHTTPRequest est bloqué à cause de -

Aucun en-tête 'Access-Control-Allow-Origin' n'est présent sur la ressource demandée. Origine 'null' est donc pas autorisé à accéder.

J'ai vérifié StackOverflow pour cette solution de problème et passer par ici , [ici4 et ici, mais ne peut pas obtenir ma solution parfaitement.

Quelqu'un peut-il m'éclairer?

25
demandé sur geocodezip 2015-02-06 09:21:44

8 réponses

Les requêtes AJAX ne sont possibles que si le port, le protocole et le domaine de l'expéditeur et du récepteur sont égaux, sinon peuvent conduire à CORS. CORS signifie Cross-origin resource sharing et doit être pris en charge du côté serveur.

Solution

JSONP

JSONP ou "JSON avec padding" est une technique de communication utilisée dans les programmes JavaScript fonctionnant dans les navigateurs web pour demander des données à partir d'un serveur dans un domaine différent, quelque chose d'interdit par le web typique navigateurs en raison de la Politique de même origine.

Quelque chose comme ça pourrait vous aider à vous accoupler.. :)

$.ajax({
            url: Auto_Complete_Link, 
            type: "GET",   
            dataType: 'jsonp',
            cache: false,
            success: function(response){                          
                alert(response);                   
            }           
        });    
10
répondu Outlooker 2015-02-06 06:45:29

Ok donc c'est comme ça que nous le faisons en javascript... google ont leurs propres fonctions....

Lien: https://developers.google.com/maps/documentation/javascript/places#place_search_requests

var map;
var service;
var infowindow;

function initialize() {
  var pyrmont = new google.maps.LatLng(-33.8665433,151.1956316);

  map = new google.maps.Map(document.getElementById('map'), {
      center: pyrmont,
      zoom: 15
    });

  var request = {
    location: pyrmont,
    radius: '500',
    types: ['store']
  };

  service = new google.maps.places.PlacesService(map);
  service.nearbySearch(request, callback);
}

function callback(results, status) {
  if (status == google.maps.places.PlacesServiceStatus.OK) {
    for (var i = 0; i < results.length; i++) {
      var place = results[i];
      createMarker(results[i]);
    }
  }
}

Tout le monde veut avoir accès à l'Id de lieu et d'autres choses c'est comme ça que nous le faisons.... Dans la fonction de rappel, nous avons le JSONArray des lieux retournés par google... Dans la fonction de rappel à l'intérieur de la boucle après la ligne var place = results[i]; u peut obtenir wat u veux comme

console.log(place.name);
console.log(place.place_id);
var types = String(place.types);
types=types.split(",");
console.log(types[0]);
4
répondu Subendra Sharma 2016-04-15 22:51:45

Google fournit une bibliothèque client API:

<script src="https://apis.google.com/js/api.js" type="text/javascript"></script>

Il peut faire des demandes D'API google pour vous, compte tenu du chemin D'accès et des paramètres de L'API:

var restRequest = gapi.client.request({
  'path': 'https://people.googleapis.com/v1/people/me/connections',
  'params': {'sortOrder': 'LAST_NAME_ASCENDING'}
});

Étant donné que la Bibliothèque est servie à partir du domaine google, elle peut appeler en toute sécurité les API google sans problèmes CORS.

Google docs sur la façon d'utiliser CORS.

2
répondu S.D. 2017-04-10 12:27:44

J'ai pu résoudre le problème en créant un fichier PHP sur le même serveur que mon fichier javascript. Ensuite, en utilisant cURL pour obtenir les données de Google et les renvoyer à mon fichier js.

Fichier PHP

$ch = curl_init();
curl_setopt($ch, CURLOPT_URL, "https://maps.googleapis.com/maps/api/place/textsearch/xml?query=" . $_POST['search'] . "&key=".$api);
curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);
$output = curl_exec($ch);
curl_close($ch);
echo $output;

Fichier Javascript

var search = encodeURI($("#input_field").val());
$.post("curl.php", { search: search }, function(xml){
  $(xml).find('result').each(function(){
    var title = $(this).find('name').text();
    console.log(title);
  });
});

Avec cette solution, je n'obtiens aucune erreur CORS.

2
répondu Eric Reynolds 2018-02-09 16:40:51

J'ai accédé à l'API google maps comme ceci

    $scope.getLocationFromAddress = function(address) {
    if($scope.address!="Your Location"){
        $scope.position = "";
        delete $http.defaults.headers.common['X-Requested-With'];
        $http(
                {
                    method : 'GET',
                    url : 'https://maps.googleapis.com/maps/api/geocode/json?address='+ address+'&key=AIzaSyAAqEuv_SHtc0ByecPXSQiKH5f2p2t5oP4',

                }).success(function(data, status, headers, config) {

            $scope.position = data.results[0].geometry.location.lat+","+data.results[0].geometry.location.lng;                              
        }).error(function(data, status, headers, config) {
            debugger;
            console.log(data);
        });
    }
}
1
répondu lakme.1989 2016-04-22 20:34:39

Salut,

Veuillez essayer avec Google distance matrix

    var origin = new google.maps.LatLng(detectedLatitude,detectedLongitude);       
    var destination = new google.maps.LatLng(latitudeVal,langtitudeVal);
    var service = new google.maps.DistanceMatrixService();
    service.getDistanceMatrix(
      {
        origins: [origin],
        destinations: [destination],
        travelMode: 'DRIVING',            
        unitSystem: google.maps.UnitSystem.METRIC,
        durationInTraffic: true,
        avoidHighways: false,
        avoidTolls: false
      }, response_data);

      function response_data(responseDis, status) {
      if (status !== google.maps.DistanceMatrixStatus.OK || status != "OK"){
        console.log('Error:', status);
        // OR
        alert(status);
      }else{
           alert(responseDis.rows[0].elements[0].distance.text);
      }
  });

Si vous utilisez JSONP, vous obtiendrez parfois une erreur d'instruction manquante dans la CONSOLE.

Veuillez vous référer à ce document Cliquez ici

0
répondu Nadimuthu Sarangapani 2016-10-12 22:34:23

Il N'y a aucun moyen côté client d'utiliser ajax fetching Google Place API, ni utiliser jsonp (Erreur de syntaxe:) ni nous avons rencontré le problème cors,

Le seul moyen côté client est d'utiliser la Bibliothèque Google Javascript à la place https://developers.google.com/maps/documentation/javascript/tutorial

Ou vous pouvez récupérer l'api google place côté serveur, puis créer votre propre api pour votre côté client.

0
répondu EthanChou 2017-09-10 08:33:27

Je l'ai fait fonctionner après avoir trouvé la réponse par @sideshowbarker ici:

Aucun en-tête' Access-Control-Allow-Origin ' n'est présent sur la ressource demandée - lorsque vous essayez d'obtenir des données à partir d'une API REST

Et ensuite utilisé cette approche pour le faire fonctionner:

const proxyurl = "https://cors-anywhere.herokuapp.com/";
const url = "https://maps.googleapis.com/maps/api/place/nearbysearch/json?location=${latitude},${longitude}&radius=500&key=[API KEY]"; // site that doesn’t send Access-Control-*
fetch(proxyurl + url) // https://cors-anywhere.herokuapp.com/https://example.com
.then(response => response.json())
.then(contents => console.log(contents))
.catch(() => console.log("Can’t access " + url + " response. Blocked by browser?"))

Plus d'infos peuvent être trouvées dans la réponse dans le lien ci-dessus.

0
répondu Sgedda 2018-02-24 15:58:00