jQuery.get():如何将数据用于以后的变量?

时间:2014-03-13 06:21:03

标签: jquery ajax get

我仍然对Ajax很新,所以请耐心等待。

我使用$.get()从服务器检索和读取文本文件。我需要将数据存储在范围之外的变量中,以便以后可以使用它。

function some_func() {
    var ex_var = "A";
    $.get("test.txt", function(data) {
        ex_var = data;
        console.log(ex_var);  // Works
    });
    console.log(ex_var);  // Does not work
}

从阅读this开始,我理解为什么在范围之外并不起作用。但是,这似乎意味着我需要在$.get()本身的回调中做所有事情,这看起来并不吸引人。有没有更好的方法来存储来自$.get()的数据,以便以后可以使用?

2 个答案:

答案 0 :(得分:0)

Ajax调用$.get()是异步的(" A"代表#34; Ajax")。因此,调用$.get()只会启动请求远程资源的过程。然后,代码的其余部分将继续执行,包括在$.get()调用之后直接执行的代码(这就是console.log()位于其中的原因)。然后,稍后,来自ajax请求的网络调用完成,远程资源可用。在那个时间点,调用$.get()的完成回调函数,并且您的数据可用。

使用ajax调用结果的所有代码都应该在该完成处理程序中,或者应该从完成处理程序中调用。使用异步ajax调用时,您无法编写同步代码。在使用异步函数时,您必须采用一种新的思维方式。

function some_func() {
    $.get("test.txt", function(data) {
        console.log(data);  // Works
        // call some function and pass it the results of the ajax call
        // this is how you continue your code logic 
        // using the results of the ajax call
        callSomeFunction(data);
    });
}

您不想尝试将数据放入全局变量,因为您永远无法获得正确的时机。来自ajax调用的数据将在未来的不确定时间返回。您应该使用完成处理程序中的数据,当实际返回数据时,您不必担心时间问题。

答案 1 :(得分:-1)

是否使用全局变量,它是您的选择,全局变量很糟糕,如果您不知道原因,则需要阅读更多内容。所以我就你的具体问题向我提供了帮助,如何及时使用数据",换句话说:

如何在功能范围之外分配XHR的结果?

简单,只需分配

<script>
    function some_func() {
      var ex_var = "A";
      $.get("test.txt", function(data) {
            ex_var = data;
            console.log(ex_var);  // Works
        }).done(function() {
          console.log(ex_var);  // Does not work <-- will work now
        });
    }        
</script>
相关问题