Jquery get():如何为以后的变量使用数据?

Jquery get():如何为以后的变量使用数据?,jquery,ajax,get,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);

我对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
}
通过阅读,我明白了为什么超出范围是不起作用的。然而,这似乎意味着我需要在
$.get()
本身的回调中做所有事情,这似乎不太吸引人。有没有更好的方法来存储
$.get()
中的数据以便以后使用?

Ajax调用
$.get()
是异步的(这就是“Ajax”中“A”的意思)。因此,调用
$.get()
只会启动请求远程资源的过程。然后,其余的代码继续执行,包括直接在
$.get()
调用之后的代码(这就是位于那里的
控制台.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调用的数据在将来的不确定时间返回。当数据实际返回时,您应该使用完成处理程序中的数据,这样您就不必担心时间问题。

是否使用全局变量,这是您的选择,全局变量是不好的,如果您不知道为什么,您需要阅读更多。因此,我就如何“以后使用数据”的具体问题向您提供了帮助,换句话说:

如何从函数范围外的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>

函数some_func(){
var ex_var=“A”;
$.get(“test.txt”,函数(数据){
ex_var=数据;
console.log(ex_var);//有效
}).done(函数(){

console.log(ex_var);//不起作用您不能这样做,因为$.get()is asynchronousget is async request,意味着它不会等待请求完成。最好使用Promissions。或者使用jquery ajax和async应该是错误的。您可以在全局范围内声明一个变量,并将来自ajax的
数据
的值分配给该变量,然后在ajax完成后的其他调用中使用它。但正如我所说,这意味着将$.get()设置为“main()”,而不是用于其他函数似乎更合适。我只是想知道是否有更多的“better”因为在回调中抛出程序的所有子例程似乎很奇怪。@user3064776-异步编程就是这样工作的。它使用回调。如果你把
$.get()
在另一个函数中,您只需向另一个函数传递一个回调函数,该函数在数据可用时将被调用。习惯它。异步编程就是这样工作的,period。异步编程有不同的风格,如Promission(如果您喜欢),但您仍然会遇到相同的基本问题。您的代码必须在回调中的Ajax调用之后继续。