Javascript 在jquery中使用my函数之外的变量

Javascript 在jquery中使用my函数之外的变量,javascript,jquery,Javascript,Jquery,我想在我的函数之外使用变量current,我尝试了许多逻辑,但我只是在控制台中得到了未定义的变量。是否有我遗漏或做错的事情 var interval = null; $(document).ready(function() { interval = setInterval(updateDiv, 1000); }); function updateDiv() { var previous = ""; var postIDAPI = "http://localhost/test/jso


我想在我的函数之外使用变量
current
,我尝试了许多逻辑,但我只是在控制台中得到了
未定义的变量。是否有我遗漏或做错的事情

var interval = null;
$(document).ready(function() {
  interval = setInterval(updateDiv, 1000);
});

function updateDiv() {
  var previous = "";
  var postIDAPI = "http://localhost/test/json.php?shortURL=1";
  $.getJSON(postIDAPI, function(json) {
    var current = json.postid;
    console.log('PostID : ', current);
    $("#address").html(current);
    if (previous !== current) {
      clearInterval(interval);
    };
  });
};
var postID = current;
//here i want to use variable current

谢谢,我们将感谢您的帮助。

在更高的范围内声明current,以便它在那里可用,然后在您的内部函数中直接引用它(无
var
语句),如下所示:

var interval = null;
var current;
$(document).ready(function() {
    interval = setInterval(updateDiv, 1000);
});

function updateDiv() {
    var previous = "";
    var postIDAPI = "http://localhost/test/json.php?shortURL=1";
    $.getJSON(postIDAPI, function(json) {
        current = json.postid;
        console.log('PostID : ', current);
        $("#address").html(current);
        if (previous !== current) {
            clearInterval(interval);
        }
    });
}
var postID = current;
//here i want to use variable current

然而,正如评论家Dave Newton在下面指出的那样,在从ajax调用返回数据并执行回调之前,current在此时实际上是不可用的——因此,您最好在回调结束时调用的
函数中包装您需要的任何附加功能(如果这与您的情况相关)。

在更高的范围内声明current,使其可用,然后在内部函数中直接引用它(无
var
语句),如下所示:

var interval = null;
var current;
$(document).ready(function() {
    interval = setInterval(updateDiv, 1000);
});

function updateDiv() {
    var previous = "";
    var postIDAPI = "http://localhost/test/json.php?shortURL=1";
    $.getJSON(postIDAPI, function(json) {
        current = json.postid;
        console.log('PostID : ', current);
        $("#address").html(current);
        if (previous !== current) {
            clearInterval(interval);
        }
    });
}
var postID = current;
//here i want to use variable current

然而,正如评论家Dave Newton在下面指出的那样,在从ajax调用返回数据并执行回调之前,current在此时实际上是不可用的——因此,您最好在回调结束时调用的
函数中包装您需要的任何附加功能(如果这与您的情况相关)。

您可以在
$(document).ready()之外声明变量。


您可以在
$(document.ready()



不要在函数中定义它?但是你会遇到Ajax的整个“A”部分。你为什么要这样做?在全局范围之外有一个变量会使全局范围混乱。你可以在updateDiv()之外全局声明它函数,但在使用ajax时为什么要这样做?这没有意义。您希望在它可能获得值之前使用
current
var postID=current;
是在调用
updateDiv
之前执行的。此外,
updateDiv
可能会被多次调用,从而可以分配不同的值到当前值。实际上我需要它,因为我想在另一个函数中使用该变量。我全局尝试了,但它总是返回未定义的变量。不要在函数中定义它?但是你会遇到整个“A”是Ajax的一部分。为什么要这样做?在全局范围之外有一个变量会使全局范围变得混乱。您可以在updateDiv()之外全局声明它函数,但在使用ajax时为什么要这样做?这没有意义。您希望在它可能获得值之前使用
current
var postID=current;
是在调用
updateDiv
之前执行的。此外,
updateDiv
可能会被多次调用,从而可以分配不同的值到当前的
。实际上,我需要它,因为我想在另一个函数中使用该变量。我尝试了全局性,但它总是返回未定义的变量。这不会解决异步性的根本问题。很好的一点——我的回答可能不充分——我将给出一个注释。另外,since
updateDiv
将被多次调用一次访问
current
是不合逻辑的。这几乎是自相矛盾的。@FelixKling这是否可能?如果可能,请您提供一些我的代码示例?@RiskyJatt-我认为FelixKling并不是说它本身不起作用,而是说它可能很差t out/designed(希望他或她不介意我猜测它们的含义)。但是,如果不清楚您想要实现的是什么,以及您为什么要以自己的方式实现它,则很难让您更好地了解它是否会起作用。如果您在块外有一些其他代码,这些代码运行时会发生变化,您希望访问“current”那么应该没问题。如果它需要立即访问,可能不会…这无法解决异步性的根本问题。一个很好的观点——我的答案可能被证明是不够的——我将对此做一个注释。此外,由于
updateDiv
将被多次调用,因此访问
curr是不合逻辑的ent
一次。这几乎是自相矛盾的。@FelixKling这可能吗?如果可能的话,你能提供一些我的代码的例子吗?@RiskyJatt-我认为FelixKling并不是说它本身不起作用,而是说它可能是经过深思熟虑/设计的(希望他或她不介意我猜测它们的含义)。但是,如果不清楚您想要实现的是什么,以及您为什么要以自己的方式实现它,则很难让您更好地了解它是否会起作用。如果您在块外有一些其他代码,这些代码运行时会发生变化,您希望访问“current”那么应该没问题。如果它需要立即访问,可能不会…这并不能解决异步性的根本问题。抱歉,请您解释一下好吗?@mrid-See这并不能解决异步性的根本问题。抱歉,请您解释一下好吗?@mrid-See