setInterval中的Ajax请求。中止它并重新开始

时间:2017-01-11 15:27:40

标签: jquery ajax request setinterval

我正在另一个ajax内执行ajax请求(在setInterval内),但我必须在每次滴答后中止内部ajax并在每个时间间隔再次发送它。为什么我需要setInterval?因为我必须每秒检查服务器的答案(用户应拨打号码激活功能)。为什么我需要abort请求?因为当我向服务器发送请求时,我无法转到另一个页面/更新页面/单击另一个按钮以生成新号码在哪里调用(实际上我可以,但如果ajax没有中止,它将等到超时),但它应该是可能的。

问题: 如何给出离开页面的机会,点击另一个按钮,也许做中止(但是在新的时间间隔继续发送请求)? enter image description here 在图片上,您可以看到我有console log次20次而ajax尚未发送。 (最后中止)

寻找您的建议,随时提出您需要的内容以便更好地理解

jQuery的:

var ctimer;
var reply_wait;
var mpay_url = php.ajaxurl;
var ajax_reply;
var ajax_reply2;

/* Payment Start Listener */
jQuery(".mobile_pay_action").click(function () {

    clearInterval(ctimer);
    clearInterval(reply_wait);

    var m_pay_container = jQuery(this).data('container');
    var m_pay_case = jQuery(this).data('articleId');
    var static_id = jQuery(this).data('staticId');

    jQuery(m_pay_container).show();

    var pay = jQuery.ajax({
        type: "POST",
        url: mpay_url,
        data: {
            artid: m_pay_case,
            action: 'mobile_pay_ajax',
            action2: 'pay'
        },
        success: function (r) {
            var d = JSON.parse(r);
            // console.log(d);
            jQuery('#mobile_pay').html(d.msg);
            if (d.status === "pay_wait") {

                ctimer = setInterval(function () {
                    m_pay_countdown();
                }, 1000);


                reply_wait = setInterval(function () {


                    ajax_reply = jQuery.ajax({
                        url: mpay_url,
                        data: {
                            'action2': 'pay_reply',
                            action: 'mobile_pay_ajax',
                            'artid': m_pay_case,
                            'static_article_id': static_id,
                            'm_pay_div': m_pay_container
                        },
                        dataType: "json",
                        success: function (data) {

                            if (typeof data.status !== 'undefined') {
                                if (data.status === "done") {
                                    clearInterval(ctimer);
                                    clearInterval(reply_wait);

                                    var expires = new Date();

                                    if(m_pay_case > 0 ){
                                        jQuery.cookie("newspaper_article_access_" + m_pay_case, m_pay_case, {
                                            expires : 30,
                                            path    : '/'
                                        });
                                    }else{
                                        expires.setTime(expires.getTime() + (60 * 60 * 1000 * 24));
                                        jQuery.cookie("newspaper_one_day_access", 'access', {
                                            expires : expires,
                                            path    : '/'
                                        });
                                    }

                                    jQuery('.article_content_locker').hide();
                                    jQuery('.article.full_article .article_content').html(data.content);

                                }
                            }
                        }

                    });


                    ajax_reply.abort();

                    console.log('request');

                }, 1000);

            }
        },
        error: function (e) {
            alert('Error: ' + e);
        }
    });

    return false;
});

function m_pay_countdown() {
    var sec = parseInt(jQuery('#m_pay_counter').text()) || 0;
    jQuery('#m_pay_counter').text(--sec);
    if (sec == 0) {
        var text = '<div class="mobile_payment_content_box"><span class="time_out">Aeg sai otsa!</span></div>';
        jQuery('#mobile_pay').html(text);
        clearInterval(ctimer);
        clearInterval(reply_wait);
    }
}

0 个答案:

没有答案