我无法解决这个问题。我读到的关于这个问题的每个帖子都会导致我失败,所以我将在这个帖子中再试一次。
我需要在方法中进行AJAX调用。我的函数需要在返回任何内容之前等待我的ajax结果。
我读到Deferred应该是正确的方法,但它不起作用。
my_method();
function my_method() {
var d1 = $.Deferred();
console.log('Start');
$.when(d1).done(function(value) {
console.log(value);
});
$.ajax({
url: '/echo/js/?js=hello%20world',
complete: function(response) {
d1.resolve("Done");
}
});
console.log('End method');
}
console.log('Outside World');
示例JSFIDDLE:https://jsfiddle.net/ttx1qp0r/
正如您可以看到此代码按顺序输出: -开始 - 结束方法 -外面的世界 完成度的数
但这不是我想要的。我需要外面的世界才能成为最后一件事。
从技术上讲,我尝试进行同步ajax调用,但是使用async:false已被弃用或不是一个好主意(不是未来的)。
我做错了什么?我的应用程序流程依赖于此。
由于
答案 0 :(得分:0)
如何在一个函数中包装外部世界,然后在done
之后调用该函数:
my_method();
function my_method() {
var d1 = $.Deferred();
console.log('Start');
$.when(d1).done(function(value) {
console.log(value);
outsideWorld();
});
$.ajax({
url: '/echo/js/?js=hello%20world',
complete: function(response) {
d1.resolve("Done");
}
});
console.log('End method');
}
function outsideWorld()
{
console.log('Outside World');
}