<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['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);
$结果=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('Content-Type: application/json; charset=UTF-8');
echo json_encode($output);</pre>
<p><br />></p>
这将把值设置为字面字符串currCode。您想将其设置为变量currCode中的值。为了做到这一点,请删除引号: