Déclenchez des modifications en utilisant les valeurs de l'API.
P粉633309801
2023-07-30 15:33:31
<p>Je travaille sur un projet dans lequel je dois obtenir les coordonnées actuelles et les enregistrer en tant que variables, puis envoyer ces paramètres à GeoNames pour obtenir le code du pays. Ce code de pays sera utilisé pour déclencher un événement de changement dans un menu déroulant (qui a été préalablement renseigné avec le code du pays comme valeur) qui affichera les frontières d'un pays (en utilisant geoJSON). Si je clique réellement sur n'importe quel pays dans le menu, cela fonctionne bien, mais après avoir reçu le code des GeoNames, je ne peux pas déclencher l'événement de changement. Le problème survient chaque fois que j'ajoute cette ligne de code après avoir obtenu le code du pays. </p>
<pre class="brush:php;toolbar:false;">$('#countrySelect').val('currCode').change();</pre>
<p>En plus de ne pas fonctionner, j'obtiens également cette erreur : Map.js:291 Erreur non détectée : les limites ne sont pas valides.</p><p>Est-ce que quelqu'un sait ce que je fais de mal ? (J'utilise php pour le décodage et j'obtiens la carte du dépliant). </p><p>Voici les détails :</p><p>Ce code est utilisé pour remplir le menu déroulant :</p><p><br /> </p> ;
<pre class="brush:php;toolbar:false;">$.ajax({
URL : "libs/php/geoJson.php",
tapez : "POST",
Type de données : "json",
succès : fonction (résultat) {
//console.log(résultat);
pour (var i=0; i<result.data.border.features.length; i++) {
$('#countrySelect').append($('<option>', {
valeur : result.data.border.features[i].properties.iso_a3,
texte : result.data.border.features[i].properties.name,
}));
}
}
});</pré>
<p>Cela créera les frontières (et cela fonctionne bien) lorsque les pays sont sélectionnés manuellement. </p>
<pre class="brush:php;toolbar:false;">var border;
$('#countrySelect').on("change", function() {
let name = $('#countrySelect').val();
//obtenir + afficher la bordure
$.ajax({
URL : "libs/php/geoJson.php",
tapez : 'POST',
Type de données : 'json',
succès : fonction (résultat) {
const filterData = result.data.border.features.filter((a) => (a.properties.iso_a3 === nom));
border = L.geoJSON(filterData[0]).addTo(map);
map.fitBounds(border.getBounds());
},
});
});</pré>
<p>Cette partie du code essaie d'obtenir les coordonnées (ce qui semble fonctionner correctement), de les transmettre à GeoNames pour obtenir le code du pays (qui semble également fonctionner correctement), puis déclenche l'événement de changement mentionné ci-dessus (mais cette partie ne fonctionne pas).</p>
<pre class="brush:php;toolbar:false;">navigator.geolocation.getCurrentPosition(success);
succès de la fonction (position) {
laissez lat = position.coords.latitude;
soit lng = position.coords.longitude;
let coords = {"lat": lat, "lng": lng};
// Requête AJAX avec les coordonnées des geoNames pour obtenir le code du pays
$.ajax({
URL : "libs/php/getCurrentCode.php",
tapez : "POST",
Type de données : "json",
données : coordonnées,
succès : fonction (résultat) {
console.log(JSON.stringify(result));
if (result.status.name == "ok") {
$(result["data"]["countryCode"]);
laissez currCode = result.data;
console.log(currCode);
//déclenche le changement avec le code récupéré
$('#countrySelect').val('currCode').change();
} ;
} ;
});
};</pré>
<p>我的 php:</p>
<pre class="brush:php;toolbar:false;">ini_set('display_errors', 'On');
rapport d'erreur (E_ALL);
$executionStartTime = microtime(true);
$url='http://api.geonames.org/countryCodeJSON?&lat=' . $_REQUEST['lat'] . '&lng=' . $_REQUEST['lng'] . '&nom d'utilisateur=&style=full';
$ch = curl_init();
curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, false);
curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
curl_setopt($ch, CURLOPT_URL,$url);
$result=curl_exec($ch);
curl_close($ch);
$decode = json_decode($result,true);
$output['statut']['code'] = '200';
$output['statut']['nom'] = 'ok';
$output['status']['description'] = 'succès';
$output['status']['returnedIn'] = intval((microtime(true) - $executionStartTime) * 1000) . ' MS';
$output['data'] = $decode['countryCode'];
//var_dump($decode);
header('Content-Type: application/json; charset=UTF-8');
echo json_encode($output);</pre>
<p><br /></p>
Cela définira la valeur sur la chaîne littérale currCode. Vous souhaitez lui attribuer la valeur de la variable currCode. Pour ce faire, supprimez les guillemets :