我正在另一个ajax
内执行ajax
请求(在setInterval内),但我必须在每次滴答后中止内部ajax并在每个时间间隔再次发送它。为什么我需要setInterval
?因为我必须每秒检查服务器的答案(用户应拨打号码激活功能)。为什么我需要abort
请求?因为当我向服务器发送请求时,我无法转到另一个页面/更新页面/单击另一个按钮以生成新号码在哪里调用(实际上我可以,但如果ajax没有中止,它将等到超时),但它应该是可能的。
问题:
如何给出离开页面的机会,点击另一个按钮,也许做中止(但是在新的时间间隔继续发送请求)?
在图片上,您可以看到我有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);
}
}