将ajax .done-function中的变量传递给javascript变量

时间:2018-03-03 02:55:58

标签: javascript jquery ajax

我试图将ajax .done()查询的结果传递给.done函数之外的对象或变量。不幸的是,似乎不可能在函数之外读取变量,因为每次我尝试将它传递给全局变量时,它都会得到值" undefined"。当我在.done函数内警告变量时,将读取该值。 您可以在下面找到我的代码:

var result;
//doing the ajax call to a .php file
var dO = $.ajax({
            url: "/php-sites/fetch_ressources.php",
            type: 'post',
            dataType: 'json',
            data: {
                operation: "fetch_name"
            }
        });
        //fetching the result with done
        $.when(dO).done(function(data) {
            //alert works here
            result = data;
            alert(result);
        });
//alert doesn't work here
alert(result);

我想知道唯一的解决方案是将值传递给DOM-Object并使用其他函数读取它。 我期待你的回答!谢谢!

2 个答案:

答案 0 :(得分:0)

我认为您正在寻找async选项

1) async:false = Execution Hold. 
2) async:true = Execution continued. 

异步意味着脚本将向服务器发送请求,并在不等待响应的情况下继续执行。

var result;

var dO = $.ajax({
            url: "https://ajax.googleapis.com/ajax/libs/jquery/3.3.1/jquery.min.js",
            async:false,
        });

        //fetching the result with done

        $.when(dO).done(function(data) {
            console.log("one");
            result = data;
            console.log(result);
        });

console.log('two');

var result;

var dO = $.ajax({
            url:'https://ajax.googleapis.com/ajax/libs/jquery/3.3.1/jquery.min.js' ,
            async: false,
        });

        //fetching the result with done

        $.when(dO).done(function(data) {
            console.log("one");
            result = data;
            console.log(result.substr(0,23));
        });

console.log("two");
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script>

答案 1 :(得分:0)

  

我试图将ajax .done()查询的结果传递给.done函数之外的对象或变量。不幸的是,似乎不可能在函数之外读取变量,因为每次我尝试将它传递给全局变量时,它都会得到值&#34; undefined&#34;

作为Javascript的异步特性,结果变量外部警报显示未定义,因为它没有获得.done函数结果值。 通过asynchrounus,这意味着没有确定性首先执行(没有顺序)。外部警报结果首先在函数和完成函数之前执行,此时逻辑上未定义

  

当我在.done函数内警告变量时,会读取该值。

当你使用这样的功能时,&#34;当&#34;函数先执行 执行.done函数,其中包含结果值。因此,在将结果值分配给数据并发出警报后发出警报时,它会显示该值,因为它是在该时刻由该值定义的。

  

我想知道唯一的解决方案是将值传递给DOM-Object并使用其他函数读取它。我期待你的回答

我的建议是返回.done函数中的结果值,并将其分配给变量。 这样结果就会得到外面的值,并在之后提醒外面的值。