我试图将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并使用其他函数读取它。我期待着你的回答!谢谢!
alert
在doneCallback
内部工作,因为只有在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>
我想你正在寻找一个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>
我试图将ajax .done()查询的结果传递给.done函数之外的对象或变量。不幸的是,似乎不可能在函数之外读取变量,因为每次我尝试将它传递给全局变量时,它的值都是“未定义”
由于Javascript的异步特性,结果变量外部警报显示未定义,因为它没有获得.done函数结果值。通过asynchrounus,这意味着没有确定性首先执行(没有顺序)。由于外部警报结果首先在函数和完成函数之前执行,因此在逻辑上未定义
当我在.done函数内警告变量时,将读取该值。
当你使用这样的函数时,“when”函数在执行包含结果值的.done函数之前首先执行。所以当你在将结果的值赋给数据并发出警报后发出警报时,它会显示该值,因为它由当时的那个值定义。
我想知道唯一的解决方案是将值传递给DOM-Object并使用其他函数读取它。我很期待你的回答
我的建议是返回.done函数中的结果值,并将其分配给变量。这样结果就可以得到外面的值,然后在有值之后向外警告。