Cetuskan perubahan menggunakan nilai daripada API.
P粉633309801
2023-07-30 15:33:31
<p>Saya sedang mengusahakan projek di mana saya perlu mendapatkan koordinat semasa dan menyimpannya sebagai pembolehubah dan kemudian menghantar parameter ini kepada GeoNames untuk mendapatkan kod negara. Kod negara ini akan digunakan untuk mencetuskan peristiwa perubahan pada menu lungsur (yang sebelum ini telah diisi dengan kod negara sebagai nilai) yang akan memaparkan sempadan negara (menggunakan geoJSON). Jika saya benar-benar mengklik pada mana-mana negara pada menu ia berfungsi dengan baik, tetapi selepas saya mendapat kod daripada GeoNames, saya tidak boleh melancarkan acara perubahan. Masalah timbul apabila saya menambah baris kod ini selepas mendapat kod negara. </p>
<pre class="brush:php;toolbar:false;">$('#countrySelect').val('currCode').change();</pre>
<p>Selain tidak berfungsi, saya juga mendapat ralat ini: Map.js:291 Ralat Tidak Ditangkap: Had tidak sah.</p><p>Adakah sesiapa tahu apa yang saya lakukan salah? (Saya menggunakan php untuk penyahkodan dan saya mendapat peta dari risalah). </p><p>Berikut ialah butiran:</p><p>Kod ini digunakan untuk mengisi menu lungsur:</p><p><br /> </p> ;
<pre class="brush:php;toolbar:false;">$.ajax({
url: "libs/php/geoJson.php",
taip: "POST",
dataType: "json",
kejayaan: function(hasil) {
//console.log(hasil);
untuk (var i=0; i<result.data.border.features.length; i++) {
$('#countrySelect').append($('<option>', {
nilai: result.data.border.features[i].properties.iso_a3,
teks: result.data.border.features[i].properties.name,
}));
}
}
});</pre>
<p>Ini akan mewujudkan sempadan (dan ia berfungsi dengan baik) apabila negara dipilih secara manual. </p>
<pre class="brush:php;toolbar:false;">var border;
$('#countrySelect').on("change", function() {
biarkan nama = $('#countrySelect').val();
//dapatkan + tunjukkan sempadan
$.ajax({
url: "libs/php/geoJson.php",
jenis: 'POST',
dataType: 'json',
kejayaan: function(hasil) {
const filterData = result.data.border.features.filter((a) => (a.properties.iso_a3 === nama));
sempadan = L.geoJSON(filterData[0]).addTo(map);
map.fitBounds(border.getBounds());
},
});
});</pre>
<p>Bahagian kod ini cuba mendapatkan koordinat (yang nampaknya berfungsi dengan baik), hantarkannya kepada GeoNames untuk mendapatkan kod negara (yang juga kelihatan berfungsi dengan baik), dan kemudian menyalakan peristiwa perubahan yang disebutkan di atas (tetapi bahagian ini tidak berfungsi).</p>
<pre class="brush:php;toolbar:false;">navigator.geolocation.getCurrentPosition(success);
kejayaan fungsi(kedudukan) {
biarkan lat = kedudukan.koordinat.latitud;
let lng = position.coords.longitud;
let coords = {"lat": lat, "lng": lng};
//Permintaan AJAX dengan kord ke geoNames untuk mendapatkan kod negara
$.ajax({
url: "libs/php/getCurrentCode.php",
taip: "POST",
dataType: "json",
data: koordinat,
kejayaan: function(hasil) {
console.log(JSON.stringify(hasil));
if (result.status.name == "ok") {
$(result["data"]["countryCode"]);
biarkan currCode = result.data;
console.log(currCode);
//cetuskan perubahan dengan kod yang diambil
$('#countrySelect').val('currCode').change();
};
};
});
};</pre>
<p>我的 php:</p>
<pre class="brush:php;toolbar:false;">ini_set('display_errors', 'On');
error_reporting(E_ALL);
$executionStartTime = masa mikro(true);
$url='http://api.geonames.org/countryCodeJSON?&lat=' . $_REQUEST['lat'] . '&lng=' . $_REQUEST['lng'] . '&nama pengguna=&style=penuh';
$ch = curl_init();
curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, palsu);
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['status']['code'] = '200';
$output['status']['name'] = 'ok';
$output['status']['description'] = 'berjaya';
$output['status']['returnedIn'] = intval((microtime(true) - $executionStartTime) * 1000) . ' Cik';
$output['data'] = $decode['countryCode'];
//var_dump($decode);
header('Content-Type: application/json; charset=UTF-8');
echo json_encode($output);</pre>
<p><br /></p>
Ini akan menetapkan nilai kepada rentetan literal currCode. Anda mahu menetapkannya kepada nilai dalam currCode pembolehubah. Untuk melakukan ini, keluarkan petikan: