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

问题描述 投票:0回答:3

我试图将ajax .done()查询的结果传递给.done函数之外的对象或变量。不幸的是,似乎无法在函数外部读取变量,因为每次我尝试将其传递给全局变量时,它的值都是“未定义”。当我在.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并使用其他函数读取它。我期待着你的回答!谢谢!

javascript jquery ajax
3个回答
0
投票

alertdoneCallback内部工作,因为只有在ajax请求成功后才会调用它。如果你有一个函数你需要传递result变量,你应该像doneCallback一样在alert中调用这个函数。

在下面的代码片段中,我进行了内部和外部日志调用,以向您显示外部日志在内部之前被调用。我只是为了演示目的而对jquery脚本使用了get请求。运行它并检查控制台输出。

var dO = $.ajax({
            url:'https://ajax.googleapis.com/ajax/libs/jquery/3.3.1/jquery.min.js'            
        });
        //fetching the result with done
        $.when(dO).done(function(data) {                        
            console.log("inner log")
            processResult(data)
        });
		
console.log("outer log")

function processResult(result){
  console.log("The result is: " + result.substr(0,50))
}
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script>

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>

0
投票

我试图将ajax .done()查询的结果传递给.done函数之外的对象或变量。不幸的是,似乎不可能在函数之外读取变量,因为每次我尝试将它传递给全局变量时,它的值都是“未定义”

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

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

当你使用这样的函数时,“when”函数在执行包含结果值的.done函数之前首先执行。所以当你在将结果的值赋给数据并发出警报后发出警报时,它会显示该值,因为它由当时的那个值定义。

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

我的建议是返回.done函数中的结果值,并将其分配给变量。这样结果就可以得到外面的值,然后在有值之后向外警告。

© www.soinside.com 2019 - 2024. All rights reserved.