<p>我正在處理一個項目,在這個項目中,我需要獲取當前的坐標,並將它們保存為變量,然後將這些參數發送到GeoNames,以獲取國家代碼。這個國家代碼將用於觸發一個更改事件,作用於一個下拉式選單(之前已經填充了國家代碼作為值),該下拉式選單將顯示一個國家的邊界(使用geoJSON)。如果我實際上在選單上點擊任何一個國家,它都可以正常工作,但是當我從GeoNames獲取到程式碼後,我無法觸發更改事件。每當我在獲取到國家代碼後添加這行代碼時,問題就出現了。 </p>
<pre class="brush:php;toolbar:false;">$('#countrySelect').val('currCode').change();</pre>
<p>除了不起作用之外,我還收到了這個錯誤:Map.js:291 Uncaught Error: Bounds are not valid.</p><p>有人知道我做錯了什麼嗎? (我正在使用php進行解碼,並且我從leaflet獲取地圖)。 </p><p>以下是詳細資料:</p><p>這個程式碼用來填滿下拉式選單:</p><p><br /></p> ;
<pre class="brush:php;toolbar:false;">$.ajax({
url: "libs/php/geoJson.php",
type: "POST",
dataType: "json",
success: function(result) {
//console.log(result);
for (var i=0; i<result.data.border.features.length; i ) {
$('#countrySelect').append($('<option>', {
value: result.data.border.features[i].properties.iso_a3,
text: result.data.border.features[i].properties.name,
}));
}
}
});</pre>
<p>當手動選擇國家時,這將創建邊界(並且它可以正常工作)。 </p>
<pre class="brush:php;toolbar:false;">var border;
$('#countrySelect').on("change", function() {
let name = $('#countrySelect').val();
//get show border
$.ajax({
url: "libs/php/geoJson.php",
type: 'POST',
dataType: 'json',
success: function(result) {
const filterData = result.data.border.features.filter((a) => (a.properties.iso_a3 === name));
border = L.geoJSON(filterData[0]).addTo(map);
map.fitBounds(border.getBounds());
},
});
});</pre>
<p>這部分程式碼嘗試獲取座標(似乎可以正常工作),將它們傳遞給GeoNames以獲取國家代碼(似乎也可以正常工作),然後觸發上述的更改事件(但這部分不起作用)。</p>
navigator.geolocation.getCurrentPosition(成功);
函數成功(位置){
讓 lat = 位置.座標.緯度;
令 lng = 位置.座標.經度;
讓 coords = {"lat": lat, "lng": lng};
//帶有座標的AJAX請求到geoNames以取得國家/地區代碼
$.ajax({
url: "libs/php/getCurrentCode.php",
類型:“帖子”,
資料類型:“json”,
數據:座標,
成功:函數(結果){
console.log(JSON.stringify(結果));
if (result.status.name == "ok") {
$(結果["數據"]["國家代碼"]);
讓 currCode = 結果.data;
控制台.log(currCode);
//用檢索到的程式碼觸發更改
$('#countrySelect').val('currCode').change();
};
};
});
};</pre>
<p>我的 php:</p>
ini_set('display_errors', 'On');
錯誤報告(E_ALL);
$executionStartTime = microtime(true);
$url='http://api.geonames.org/countryCodeJSON?&lat=' 。 $_REQUEST['緯度'] 。 '&lng=' 。 $_REQUEST['lng'] 。 '&用戶名=&樣式=完整';
$ch=curl_init();
curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, false);
curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
curl_setopt($ch, CURLOPT_URL,$url);
$結果=curl_exec($ch);
捲曲_關閉($ch);
$decode = json_decode($結果,true);
$輸出['狀態']['代碼'] = '200';
$output['status']['name'] = 'ok';
$output['狀態']['描述'] = '成功';
$output['status']['returnedIn'] = intval((microtime(true) - $executionStartTime) * 1000) 。 ' 多發性硬化症';
$output['data'] = $decode['countryCode'];
//var_dump($解碼);
header('內容類型:application/json; charset=UTF-8');
echo json_encode($output);</pre>
<p><br />></p>
這將把值設為字面字串currCode。您要將其設定為變數currCode中的值。為了做到這一點,請刪除引號: