Javascript 等待ajax完成后再返回函数

Javascript 等待ajax完成后再返回函数,javascript,jquery,ajax,Javascript,Jquery,Ajax,我使用此代码从服务器获取消息并将其打印到前端: var message = getMessageFromServer(); $('.result').html(message); function getMessageFromServer() { var result = null; $.ajax({ url: 'index.php', type: 'GET', success: function (msg) {

我使用此代码从服务器获取消息并将其打印到前端:

var message = getMessageFromServer();
$('.result').html(message);

function getMessageFromServer() {
    var result = null;

    $.ajax({
        url: 'index.php',
        type: 'GET',
        success: function (msg) {
            result = msg;
        }
    });

    return result;
}
它显然不起作用,因为javascript的工作方式是,行返回结果在ajax完成之前运行,因此我的函数getMessageFromServer总是返回null

我整天都在搜索这个问题,得到了很多答案,比如将async设置为false、完成时使用、回调、将代码重新构造为更ajax友好的代码等等。但是,我使用的框架不允许我自由地重新构造代码,因此,我需要自己提出一个问题:如何在以下条件下将消息打印到前端:

前两行不能更改,我需要将结果返回到消息,以便打印到前端

不使用async:false,因为它不利于用户体验

我们可以创建更多的方法,只要在函数getMessageFromServer中使用


p/s:如果你想知道的话,我使用的框架是Magento,我试图用AJAX添加一个自定义的验证规则,但是我发现主要的问题是javascript,所以我没有把它放在标签中。

这是JS和异步回调的本质。 您不应该分配var message=getMessageFromServer,而应该在成功回调中设置$'.result'


getMessageFromServer();

function getMessageFromServer() {

    $.ajax({
        url: 'index.php',
        type: 'GET',
        success: function (msg) {
            $('.result').html(msg);
        }
    });

    return result;
}

你不能把return语句移到success回调中吗?@GrafiCode这不起作用。@Pointy为什么不呢?@GrafiCode因为它是异步的…前两行不能更改-然后你就被填充了,因为这根本不是异步的工作方式。正如我在问题中指出的,前两行不能更改,并且该消息必须从getMessageFromServer返回。所有这些都是因为我正在使用的框架。@Mee这根本不可能做到。使用promise对象是可能的@Pointy@Rishab阅读问题:前两行不能更改。这些代码行并不预期会收到承诺对象,因此问题是不可能的。让他试试这个