Javascript 访问ajax请求之外的数据
我正试图通过ajax将我调用的经度和纬度输入到它们自己的变量中,这样我就可以在我将要生成的DarkSky API请求中使用它们。我知道它们是本地的,因此不能在ajax函数之外访问,但我无法找到解决方法。这是我的密码:Javascript 访问ajax请求之外的数据,javascript,jquery,ajax,Javascript,Jquery,Ajax,我正试图通过ajax将我调用的经度和纬度输入到它们自己的变量中,这样我就可以在我将要生成的DarkSky API请求中使用它们。我知道它们是本地的,因此不能在ajax函数之外访问,但我无法找到解决方法。这是我的密码: $(document).ready(function() { //location API $("#myweather").load("window",function() { $("#location").fadeOut(function() {
$(document).ready(function() {
//location API
$("#myweather").load("window",function() {
$("#location").fadeOut(function() {
$.ajax({
async: false,
url: "https://geoip-db.com/jsonp",
jsonpCallback: "callback",
dataType: "jsonp",
success: function(loc) {
$("#location").html(loc.city)
var long = loc.longitude
var lat = loc.latitude
}
});
}).fadeIn();
});
$("#result").load("location", function() {
$("#result").fadeIn(function() {
$.getJSON("https://api.darksky.net/forecast/15f8bf5641489ec32f66662221933c14/" + lat + long, function(forecast) {
consolelog(forecast);
});
});
});
});
在不使用var的情况下全局声明这两个变量您应该在函数外部声明这两个变量,如下所示:
$(document).ready(function() {
//location API
var long = '';
var lat = '';
$("#myweather").load("window",function() {
$("#location").fadeOut(function() {
$.ajax({
async: false,
url: "https://geoip-db.com/jsonp",
jsonpCallback: "callback",
dataType: "jsonp",
success: function(loc) {
$("#location").html(loc.city)
long = loc.longitude
lat = loc.latitude
}
});
}).fadeIn();
});
$("#result").load("location", function() {
$("#result").fadeIn(function() {
$.getJSON("https://api.darksky.net/forecast/15f8bf5641489ec32f66662221933c14/" + lat + long, function(forecast) {
consolelog(forecast);
});
});
});
});
尝试:
然后,变量将在document ready函数的整个范围内可用尝试以下操作:
$(document).ready(function() {
//location API
$("#myweather").load("window",function() {
$("#location").fadeOut(function() {
$.ajax({
async: false,
url: "https://geoip-db.com/jsonp",
jsonpCallback: "callback",
dataType: "jsonp",
success: function(loc) {
$("#location").html(loc.city)
var long = loc.longitude
var lat = loc.latitude
$("#result").load("location", function() {
$("#result").fadeIn(function() {
$.getJSON("https://api.darksky.net/forecast/15f8bf5641489ec32f66662221933c14/" + lat + long, function(forecast) {
consolelog(forecast);
});
});
});
}
});
}).fadeIn();
});
});
如果在ajax调用之外声明
lat
和long
,它将可用于其他函数,但在调用$.getJSON
时可能无法加载它。您的ajaxsuccess
函数应该调用加载结果的任何代码。基本上,你想说“从geoip获取这个东西,然后使用它加载这个结果”。为什么不将.load函数转换成$.fn.function,然后在成功回调中调用它呢?这不是最好的方法-另外,回答时一定要详细解释原因,因此,人们学习而不是记住我是如何喜欢你的答案的,正如你解释的那样,其他人都不喜欢。这更有意义,但它仍然不会返回任何东西?这只会在我登录时在控制台中返回一个“”,就好像它没有被传递一样?这还取决于你在哪里使用控制台。我能看看那个密码吗?是的@EpicTriffid,我在代码中找不到带有上述给定链接的console.log。抱歉,请重试!这不会返回任何东西,好像它没有被推送到变量中?
$(document).ready(function() {
//location API
$("#myweather").load("window",function() {
$("#location").fadeOut(function() {
$.ajax({
async: false,
url: "https://geoip-db.com/jsonp",
jsonpCallback: "callback",
dataType: "jsonp",
success: function(loc) {
$("#location").html(loc.city)
var long = loc.longitude
var lat = loc.latitude
$("#result").load("location", function() {
$("#result").fadeIn(function() {
$.getJSON("https://api.darksky.net/forecast/15f8bf5641489ec32f66662221933c14/" + lat + long, function(forecast) {
consolelog(forecast);
});
});
});
}
});
}).fadeIn();
});
});