How to make a javascript variable global when called the $.get method?
本问题已经有最佳答案,请猛点这里访问。
Possible Duplicate:
How can I get jQuery to perform a synchronous, rather than asynchronous, AJAX request?
Get a variable after ajax done
以下代码中的两个警报函数返回不同的结果。我也在试着让第二个评价为真。感谢您的帮助。谢谢。。
1 2 3 4 5 6 7 8 9 10 | var array; $.get('php/getstocklist.php', function(data){ array = data; alert($.isArray(array)); //alerts true },"json"); alert($.isArray(array)); //alerts false |
问题是
为了在回调之外使用它,您需要轮询一个变量以确保已分配结果…但是,实际上您使用的是一个假的回调,因此重新构造代码并按正常方式执行更为合理:-)
如果我理解你的话,为什么你不能
1 2 3 4 5 6 | $.getJSON('php/getstocklist.php', function(data){ dosomething(data); }); function dosomething(data) {} |
第二个警报在第一个警报之前执行,因为$.get回调是异步执行的。如果希望第二个警报返回true,则应使用jquery延迟对象,如下所示:
1 2 3 4 5 6 7 8 9 10 11 | var array; deferred = $.get('php/getstocklist.php', function(data){ array = data; alert($.isArray(array)); //alerts true },"json"); // alerts true if $.get succeeded deferred.done(function () { alert($.isArray(array)); }); |
当异步$.get调用返回时,传递给
以下是发生的事情:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 | // This variable _is_ global. However, it's current value is undefined var array; $.get('php/getstocklist.php', function(data){ // After this runs, _now_ array has data in it array = data; // thus causing $.isArray to return true here. alert($.isArray(array)); //alerts true },"json"); // This call happens BEFORE the callback to the $.get call, // so as of this line, array is still undefined, which results in // the $.isArray call returning false. alert($.isArray(array)); //alerts false |
JavaScript是一种重异步语言。您必须从过程思维中解脱出来,转而考虑传递代码位以便稍后执行(这些是回调)。
这有点不靠谱,但是尝试使用设置,这样可以将变量从请求中分离出来,并使其成为全局变量。
1 2 3 | window.array = data; alert($.isArray(window.array)); |