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<result.data.border.features.length; i++) {
$('#countrySelect').append($('<옵션>', {
값: result.data.border.features[i].properties.iso_a3,
텍스트: result.data.border.features[i].properties.name,
}));
}
}
});</pre>
<p>이렇게 하면 국가를 수동으로 선택할 때 테두리가 생성됩니다(잘 작동합니다). </p>
<pre class="brush:php;toolbar:false;">var border;
$('#countrySelect').on("변경", function() {
이름 = $('#countrySelect').val();
//가져오기 + 테두리 표시
$.아약스({
URL: "libs/php/geoJson.php",
유형: '포스트',
데이터 유형: 'json',
성공: 함수(결과) {
const filterData = result.data.border.features.filter((a) => (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(성공);
함수 성공(위치) {
lat = position.coords.latitude를 설정합니다.
lng = position.coords.longitude;
let coords = {"lat": lat, "lng": lng};
//국가 코드를 얻기 위해 geoNames에 대한 좌표가 포함된 AJAX 요청
$.아약스({
URL: "libs/php/getCurrentCode.php",
유형: "POST",
데이터 유형: "json",
데이터: 좌표,
성공: 함수(결과) {
console.log(JSON.stringify(결과));
if (result.status.name == "확인") {
$(결과["데이터"]["국가코드"]);
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');
error_reporting(E_ALL);
$executionStartTime = 마이크로타임(true);
$url='http://api.genames.org/countryCodeJSON?&lat=' . $_REQUEST['lat'] . '&lng=' . $_REQUEST['lng'] . '&사용자 이름=&스타일=전체';
$ch = 컬_초기화();
컬_setopt($ch, CURLOPT_SSL_VERIFYPEER, false);
컬_setopt($ch, CURLOPT_RETURNTRANSFER, true);
컬_setopt($ch, CURLOPT_URL,$url);
$result=curl_exec($ch);
컬_닫기($ch);
$디코드 = json_decode($result,true);
$output['status']['code'] = '200';
$output['status']['name'] = '확인';
$output['status']['description'] = '성공';
$output['status']['returnedIn'] = intval((microtime(true) - $executionStartTime) * 1000) . 'ms';
$output['data'] = $decode['countryCode'];
//var_dump($decode);
header('Content-Type: 애플리케이션/json; charset=UTF-8');
echo json_encode($output);</pre>
<p><br /></p>