使用來自API的值觸發變更。
P粉633309801
P粉633309801 2023-07-30 15:33:31
0
1
426
<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>            
P粉633309801
P粉633309801

全部回覆(1)
P粉010967136
$('#countrySelect').val('currCode').change();

這將把值設為字面字串currCode。您要將其設定為變數currCode中的值。為了做到這一點,請刪除引號:

$('#countrySelect').val(currCode).change();
熱門教學
更多>
最新下載
更多>
網站特效
網站源碼
網站素材
前端模板
關於我們 免責聲明 Sitemap
PHP中文網:公益線上PHP培訓,幫助PHP學習者快速成長!