如何从一个Ajax请求一个全局变量传递数据?(How can I pass data from an

2019-09-30 10:12发布

好。 我完全莫名其妙。 下面的代码:

$(document).ready(function(){
var newToken = 1;

$.get("junk.php",
    function(newToken) {
        alert(newToken); // alerts "junk"
    });
alert(newToken); // alerts "1"
});

按我的意见,newToken的第一个警告是“垃圾”(junk.php的唯一输出)。 一旦不用彷徨外,newToken将恢复为“1”。 我需要得到这个变量设置为从junk.php输出。 这是不可能的? 我用尽了一切,并到处搜寻。

谢谢。

Answer 1:

你遮蔽第一newToken一个新的变量newToken被用来作为参数变量:

问题:

$(document).ready(function(){
var newToken = 1; // <== newToken number 1

$.get("junk.php",
    function(newToken) { // <== This is newToken number 2.
                         //     since it's the first argument
                         //     in the get success function it will
                         //     be the data returned.

        alert(newToken); // <== Alerts the data returned. newToken number 1 is 
                         // shadowed, obscured, covered up...
    });
alert(newToken);
});


解决...使用不同的名称,甚至是arguments数组:

解:

$(document).ready(function(){
var newToken = 1;

$.get("junk.php",
    function() {  // <== don't shade newToken
                  //     you could use another variable name like "data"
                  //     but I decided to use the arguments array for kicks

        alert("Data is: " + arguments[0] + // <== junk
              "\nNew Token is: " + newToken); // <== 1
    });
alert(newToken); // alerts "1"
});

在$。获得信息()

请注意,如果您更新newTokenget回调事情可能会变得非常棘手,由于通话的异步特性。 基本上,知道一切都在你的回调写的事实$.get()只有当请求完成(一段时间后),但之后一切都将得到执行$.get()但商务部准备将得到内执行向右走,和GET回调将有机会获得变量的状态,因为他们是当文档准备函数返回................基本上,你可以给newToken的初始值然后用它在get回调的工作,但什么都可能导致你不除的效果。

一些例子:

$(document).ready(function(){
    var newToken = 1;

    $.get("junk.php",
        function() {
            newToken++;
            alert(newToken); // alerts 2, so far so good.
        });
    });

$(document).ready(function(){
    var newToken = 1;

    $.get("junk.php",
        function() {
            newToken++;
            alert("get: " + newToken); // alerts 3 - this is the last alert
        });

    newToken++;
    alert("ready:" + newToken); // alerts 2 - 
                                // this happens before the server responds
});

例如的jsfiddle



Answer 2:

$(document).ready(function(){
    var newToken = 1;

    $.get("junk.php",
        function(data) {
            alert(newToken); 
        });
    alert(newToken); // alerts "1"
});


Answer 3:

首先,你的定义newToken被传递给匿名函数的上下文中$(document).ready() ,所以它不是全球性的。 我不认为这是真正的问题,但...

更为严重的是这样的:调用$.get是异步的,所以控制立即传递给您的alert(newToken)语句,而不必等待HTTP请求完成,或者其回调运行。 因此,任何代码依赖于在调用中检索数据应在其回调中运行。



Answer 4:

我找到了答案 - (惊讶,意外)jQuery的网站上所有的地方,埋在解说的。

newToken = $.ajax({ type: "GET", url: "junk.php", async: false }).responseText;

这解决了这个问题 - 是它是异步的,而且需要设置为false。 这不能使用jQuery.get()来实现,但必须jquery.ajax,其中异步:假可以设置。

随着这种格式的要求,newToken可以在整个脚本中使用。 希望这最终帮助别人。



文章来源: How can I pass data from an ajax request to a global variable?