Javascript 访问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() {

我正试图通过ajax将我调用的经度和纬度输入到它们自己的变量中,这样我就可以在我将要生成的DarkSky API请求中使用它们。我知道它们是本地的,因此不能在ajax函数之外访问,但我无法找到解决方法。这是我的密码:

$(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
时可能无法加载它。

您的ajax
success
函数应该调用加载
结果的任何代码。基本上,你想说“从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();
  });
});