如何在JavaScript/jQuery中地理定位后获取JSON?
我正在构建一个项目,从浏览器中查找地理位置,然后使用坐标从Dark Sky API()获取数据 我可以从浏览器中获取地理位置,但是一旦获取了地理位置,就很难调用JSON对象。我知道获取地理位置是“异步”的,并且与我的其他代码同时运行,我似乎无法找到解决方法 我做错什么了吗?它似乎从未运行过:如何在JavaScript/jQuery中地理定位后获取JSON?,javascript,jquery,json,Javascript,Jquery,Json,我正在构建一个项目,从浏览器中查找地理位置,然后使用坐标从Dark Sky API()获取数据 我可以从浏览器中获取地理位置,但是一旦获取了地理位置,就很难调用JSON对象。我知道获取地理位置是“异步”的,并且与我的其他代码同时运行,我似乎无法找到解决方法 我做错什么了吗?它似乎从未运行过:$.getJSON部分 所有的#testHTML都是供我参考的,以查看我的代码哪里出了问题#test4从不运行,但#test3运行 另外,我为我的问题隐藏了API密钥,因此url中有密钥字符。myJson变量
$.getJSON
部分
所有的#test
HTML都是供我参考的,以查看我的代码哪里出了问题#test4
从不运行,但#test3
运行
另外,我为我的问题隐藏了API密钥,因此url中有密钥
字符。myJson
变量确实连接了一个正确的url来检索JSON对象
任何帮助都将不胜感激
var myLat;
var newMyLat;
var myLong;
var newMyLong;
var myJson;
var functionCall;
$(document).ready(function() {
if (navigator.geolocation) {
navigator.geolocation.getCurrentPosition(function(position) {
myLat = position.coords.latitude;
myLong = position.coords.longitude;
newMyLat = parseFloat(myLat).toFixed(4);
newMyLong = parseFloat(myLong).toFixed(4);
$("#test1").html("latitude: " + newMyLat + "<br>longitude: " + newMyLong);
myJson =
"https://api.darksky.net/forecast/KEY/" +
newMyLat +
"," +
newMyLong;
$("#test2").html(myJson);
getJsonData();
}); // end of getCurrentPosition function
} // end of navigator.geolocation function
}); // end of document.ready function
function getJsonData() {
$("#test3").html("getJsonData called");
$.getJSON(myJson, function(data) {
$("#test4").html("JSON retrieved");
}); // end of .getJSON function
} // end of getJsonData function
var-myLat;
var newMyLat;
var myLong;
var newMyLong;
var-myJson;
var函数调用;
$(文档).ready(函数(){
if(导航器.地理位置){
navigator.geolocation.getCurrentPosition(函数(位置){
myLat=位置坐标纬度;
myLong=位置坐标经度;
newMyLat=parseFloat(myLat).toFixed(4);
newMyLong=parseFloat(myLong).toFixed(4);
$(“#test1”).html(“纬度:+newMyLat+”
经度:+newMyLong);
myJson=
"https://api.darksky.net/forecast/KEY/" +
纽迈拉+
"," +
纽米隆;
$(“#test2”).html(myJson);
getJsonData();
});//getCurrentPosition函数的结尾
}//navigator.geolocation函数结束
}); // 文档结束.ready函数
函数getJsonData(){
$(“#test3”).html(“调用getJsonData”);
$.getJSON(myJson,函数(数据){
$(“#test4”).html(“检索到的JSON”);
});//结束.getJSON函数
}//getJsonData函数的结尾
适用于这种情况的答案:
我只需要在JSON url的末尾添加?callback=?
,使其:
myJson = "https://api.darksky.net/forecast/ee2f66f091ed810afc3bf04adc5fa750/" + myLat + "," + myLong + "?callback=?";
谢谢你的帮助 请阅读该api的常见问题解答。它不支持CORS,您需要在服务器上使用代理来保证密钥的安全。只是看了一下,您的观点是正确的。我还尝试使用另一个API(开放天气图),但仍然不起作用。这个项目是一个在线学习课程(FreeCodeCamp),需要在CodePen上完成,是否有必要设置代理服务器?如果愿意公开您的密钥,可以使用第三方代理服务,或者只需在heroku或其他可用作代理的免费主机上创建一个简单的项目