API からの値を使用して変更をトリガーします。
<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を使用しており、リーフレットから地図を取得しています)。 </p><p>詳細は次のとおりです:</p><p>このコードは、ドロップダウン メニューを設定するために使用されます:</p><p><br /> </p>
<pre class="brush:php;toolbar:false;">$.ajax({
URL: "libs/php/geoJson.php",
タイプ:「POST」、
データ型: "json"、
成功: 関数(結果) {
//console.log(結果);
for (var i=0; i (a.properties.iso_a3 === 名前));
border = L.geoJSON(filterData[0]).addTo(map);
map.fitBounds(border.getBounds());
}、
});
});</pre>
<p>コードのこの部分は、座標を取得しようとし (これは正常に動作しているようです)、それを GeoNames に渡して国コードを取得し (これも正常に動作しているようです)、その後、上記の変更イベントを発生させます (ただし、この部分は機能しません)。</p>
<pre class="brush:php;toolbar:false;">navigator.geolocation.getCurrentPosition(success);
関数成功(位置) {
緯度 = 位置.座標.緯度; とします。
lng = 位置.座標.経度;
let coords = {"lat": lat, "lng": lng};
//国コードを取得するための geoNames への座標を含む AJAX リクエスト
$.ajax({
URL: "libs/php/getCurrentCode.php",
タイプ:「POST」、
データ型: "json"、
データ: 座標、
成功: 関数(結果) {
console.log(JSON.stringify(結果));
if (result.status.name == "ok") {
$(結果["データ"]["国コード"]);
currCode = result.data; とします。
console.log(currCode);
//取得したコードで変更をトリガーする
$('#countrySelect').val('currCode').change();
};
};
});
};</pre>
<p>私たちのphp:</p>
<pre class="brush:php;toolbar:false;">ini_set('display_errors', 'On');
エラー報告(E_ALL);
$executionStartTime = マイクロタイム(true);
$url='http://api.geonames.org/countryCodeJSON?&lat=' 。 $_REQUEST['lat'] 。 '&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);
$result=curl_exec($ch);
カール_クローズ($ch);
$decode = json_decode($result,true);
$output['ステータス']['コード'] = '200';
$output['ステータス']['名前'] = 'ok';
$output['ステータス']['説明'] = '成功';
$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>