如何使方法等待AJAX​​调用在返回结果之前返回结果?

时间:2017-11-14 22:45:48

标签: jquery ajax asynchronous xmlhttprequest synchronous

我无法解决这个问题。我读到的关于这个问题的每个帖子都会导致我失败,所以我将在这个帖子中再试一次。

我需要在方法中进行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已被弃用或不是一个好主意(不是未来的)。

我做错了什么?我的应用程序流程依赖于此。

由于

1 个答案:

答案 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');
}