关于ajax:jquery等待响应

jquery wait on response

自从我使用查询以来已经有一段时间了,我不能为我的生活弄清楚为什么这不等待响应。 我寻找类似这篇文章的答案。 我必须错过一些非常简单的事情。

调用功能:

1
2
3
4
5
6
7
8
9
$('#cappuccino-button').click(function () {
    $('#screen-one').hide();    
    var hasMilk = IsThereMilk();
    if (hasMilk) {
        $('#cappuccino-success').show();
    } else {
        $('#milk-fail').show();
    }
}

功能本身:

1
2
3
4
5
6
7
8
9
10
11
function IsThereMilk() {
    $.ajax({
        url: 'http://milkstore/gotany',
        type: 'GET',
        async: false,
        success: function(data){
            console.log('*****AJAX' + data.hasMilk);
            return data.hasMilk;
        }
    });
}

任何人都可以帮我确定为什么我的调用函数没有等待ajax请求?


IsThereMilk()调用实际上不会返回值。 虽然如果返回$.ajax(),则该值将是jQuery promise对象,而不是Boolean

尝试从IsThereMilk()调用.then()调整jsreturn $.ajax()以检查响应data.hasMilk

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
function IsThereMilk() {
    return $.ajax("http://milkstore/gotany");
}

$("#cappuccino-button").click(function () {
    $("#screen-one").hide();    
    var hasMilk = IsThereMilk();
    hasMilk.then(function(data) {
      if (data.hasMilk) {
        $("#cappuccino-success").show();
       } else {
        $("#milk-fail").show();
       }
    })
})

jsfiddle https://jsfiddle.net/r8hc6nna/


Jquery when可用于实现类似的结果。
这是我编写的第一段使用when的代码

1
2
3
4
$.when( loadMoreComms() ).then(function( data, textStatus, jqXHR ) {
                        {#var comsect = $('#comment-box-section');#}
                        $('.loader').css('display', 'none');
                    });

这是我的loadmoreComms()

1
2
3
function loadMoreComms() {
            return $.ajax({*put you ajax code here*});
}

在这里阅读更多关于jquery when的信息


你有没有尝试在ajax中成功移动条件hasMilk?

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
function IsThereMilk() {
    $.ajax({
        url: 'http://milkstore/gotany',
        type: 'GET',
        async: false,
        success: function(data){
            console.log('*****AJAX' + data.hasMilk);
            if (data.hasMilk) {
               $('#cappuccino-success').show();
            } else {
               $('#milk-fail').show();
            }
        }
    });
}

$('#cappuccino-button').click(function () {
    $('#screen-one').hide();    
    IsThereMilk();
}