>  Q&A  >  본문

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>
P粉633309801P粉633309801468일 전430

모든 응답(1)나는 대답할 것이다

  • P粉010967136

    P粉0109671362023-07-31 11:05:53

    으아악

    이렇게 하면 값이 리터럴 문자열 currCode로 설정됩니다. 변수 currCode의 값으로 설정하려고 합니다. 이렇게 하려면 따옴표를 제거하세요.

    으아악

    회신하다
    0
  • 취소회신하다