Php Ajax等待其他函数完成此问题
我有两个ajax调用,一个使用.post,另一个使用.ajax进行测试。一个作为间隔检查触发,另一个在foreach循环下发送邮件。问题是,间隔检查只在第二个ajax调用完成后返回结果,而不是在调用期间返回结果,这正是我想要实现的。我得到了我想要的结果-就在t的末尾,我当前的代码是:Php Ajax等待其他函数完成此问题,php,jquery,ajax,wordpress,Php,Jquery,Ajax,Wordpress,我有两个ajax调用,一个使用.post,另一个使用.ajax进行测试。一个作为间隔检查触发,另一个在foreach循环下发送邮件。问题是,间隔检查只在第二个ajax调用完成后返回结果,而不是在调用期间返回结果,这正是我想要实现的。我得到了我想要的结果-就在t的末尾,我当前的代码是: $("#cdj-email-members").click(function() { $(".cdj-email-content").slideUp(); $(".cdj-send-ema
$("#cdj-email-members").click(function() {
$(".cdj-email-content").slideUp();
$(".cdj-send-email").show();
// Disable the buttons
$("#save-email").hide();
$("#cdj-email-members").hide();
$("#cdj-test").attr('disabled','disabled');
// Declare the variables
var cdj_subject = $("#cdj-email-form #subject").val();
var cdj_content = $("#cdj-email-form textarea").val();
var cdj_fan_count = $("#cdj-progressbar").prop('max');
var cdj_email_members_nonce = $("#cdj_email_members_nonce").val();
// Set the interval check
setInterval(function(){
var data = {
'action': 'cdj_update_progress_bar',
};
$.post(cdjAjax.ajaxurl, data, function(response) {
var result = jQuery.parseJSON(response);
console.log(result);
$("#cdj-progressbar").attr('value', result);
});
},500);
// Send the Ajax request
$.ajax({
url: cdjAjax.ajaxurl,
type: 'POST',
data: {
action: 'cdj_email_members',
nonce: cdj_email_members_nonce,
'fan_count': cdj_fan_count,
'subject': cdj_subject,
'content': cdj_content
},
cache: false,
success: function(data) {
// Retreive the WordPress response
var status = $(data).find('response_data').text();
var message = $(data).find('supplemental message').text();
if(status == 'success') {
console.log(message);
$(".send-email-success").slideDown();
$(".send-email-success p.message").text(message);
$(".send-email-success").delay(4000).fadeOut();
// Enable the buttons
$("#save-email").show();
$("#cdj-email-members").show();
$("#cdj-test").prop('disabled', false);
// Switch back to content view
$(".cdj-email-content").delay(2000).slideDown();
$(".cdj-send-email").delay(2000).hide();
}
else {
console.log(message);
$(".send-email-error").slideDown();
$(".send-email-error p.message").text(message);
$(".send-email-error").delay(4000).fadeOut();
}
}
});
});
谢谢问题是setIntervalfunction{..},500;每500毫秒调用一次函数,但第一次调用将仅在第一次500毫秒之后进行,而不是立即进行
这就是为什么$.ajax首先运行的原因
另外,两个调用都是通过HTTP进行的,根据您的服务器配置,可以将对同一URL的两个调用排列在一个队列中,这就是$.ajax等待$.post完成的原因
为了解决这个问题,我将setInterval放在$.ajax success函数中,确保首先调用$.ajax,然后以500毫秒的间隔运行$.post真的不清楚您希望这段代码做什么。请更详细地解释期望值我需要发送回数据的时间间隔-目前正在等待.ajax在发送之前得到响应。ajax正在接任总裁。post仍然不清楚。您的$.post和$.ajax whatseever之间没有连接。直到$.ajax发送请求之后,间隔才会开始发送$.post。同样,您到底想做什么?代码正在等待,直到它使用cdj_email_members php函数从.ajax接收到响应错误或成功。发生的事情如下。用户单击提交,间隔开始,ajax php电子邮件循环开始。interval应在电子邮件循环继续时发回数据以更新进度条。一旦所有电子邮件都发送完毕,我将终止间隔。我需要在另一个短消息之后添加以下内容:在ajax调用收到响应之前,我不会从间隔中得到任何回复。