我的jQuery ajax if / else on click不起作用

时间:2015-05-20 10:36:24

标签: javascript jquery html ajax

所以我已经在这个问题上坚持了很长时间。基本上我有一个位于index.html的按钮(#action)。我有第二页:number.html。我试图从index.html获取.receiver范围。来自number.html的.success内容或.failure内容,具体取决于是否在不到2秒的时间内点击了#action。

以下是代码:

$(function() {

    var ajaxRetrieve = function(callback) {
        $.ajax({
            url: 'number.html',
            method: 'POST',
            success: function(responseData) {
                callback(responseData);
            },
            error: function(responseData) {
                alert('Check yourself');
            }
        });
    }

    var flag = 0;

    $('#action').on('click', function() {
        flag = 1;
    });

    if (flag == 1) {
        ajaxRetrieve(function(data) {
            $('.receiver').html($(data).find('.success'));
        });
    } else {
        setTimeout(function() {
            ajaxRetrieve(function(data) {
                $('.receiver').html($(data).find('.failure'));
            });
        }, 3000);
    };


});

问题:点击后,我从未收到.success内容,而且我没有错误消息。但是2秒后,.failure实际上出现了。我尝试了几种方法使它工作,但它没有。我还检查了标记值是否在单击警告框时更改,并且

1 个答案:

答案 0 :(得分:0)

您需要在on click函数中包含ajax调用,否则if逻辑只会在页面加载时调用,而不会再次调用。

$(function() {

    var ajaxRetrieve = function(callback) {
        $.ajax({
            url: 'number.html',
            method: 'POST',
            success: function(responseData) {
                callback(responseData);
            },
            error: function(responseData) {
                alert('Check yourself');
            }
        });
    }

    var flag = 0;

    $('#action').on('click', function() {
        flag = 1;
        flagCheck();
    });

    var flagCheck = function() {
        if (flag == 1) {
            ajaxRetrieve(function(data) {
                $('.receiver').html($(data).find('.success'));
            });
        } else {
            setTimeout(function() {
                ajaxRetrieve(function(data) {
                    $('.receiver').html($(data).find('.failure'));
                });
            }, 3000);
        };
    }

});