我的 jQuery 记录插入过程遇到了两个问题,我希望这个出色的 SO 社区可以帮助我解决至少一个问题。这些是问题:
问题 1 - 间歇性服务器延迟
POST
第一个问题与我的 Ubuntu 10.04 服务器在对 mySQL 数据库执行数据时似乎表现出间歇性的 4.5 秒延迟有关。大多数POST
命令在正常的毫秒内执行,但是当出现延迟时,似乎总是大约 4.5 秒。这不是一个繁忙的公共服务器,所以它不应该是服务器负载的问题。这些短片展示了我要解释的内容:
我在serverfault上发布了一个问题,正在等待来自该论坛的一些输入,这可能更适合此问题 1。
问题 2 - jQuery POST 和 GET 方法的时序
我要解决的真正问题是在GET
所有调用完成之前POST
阻止调用。目前,我已实施延迟发送. 这是代码:$.when.apply
GET
function(){
$.when.apply(undefined, InsertTheAPPs()).done(function (){
$.ajax({
url: sURL + "fileappeal/send_apps_email",
success: function() {
var m = $.msg("my message",
{header:'my header', live:10000});
setTimeout(function(){
if(m)m.setBody('...my other message.');
},3000);
setTimeout(function(){
if(m)m.close(function(){
window.location.replace(sURL+'client/view');
});
},6000);
$('#ajaxShield').fadeOut(1000);
},
error: function(){
$.msg("error message",
{header:'error header', live:10000});
}
});
});
}
我的问题是由于上述问题 1 中描述的延迟而出现的。GET
在所有POST
方法都开始后调用该方法,但我需要该GET
方法等到所有POST
方法都结束。这是我需要帮助的问题。基本上,这里发生的事情是错误的,我的确认电子邮件是在所有记录完全插入到 mySQL 数据库之前发送的。
这是 jQuery$.each
循环的代码。这是不仅需要begin,而且必须在上面的 ajax 调用之前结束fileappeal/send_apps_email
的代码:
function InsertTheAPPs(){
$('input[name=c_maybe].c_box').each(function(){
var jqxhrs = [];
if($(this).prop('checked')){
var rn = $(this).prop('value');
jqxhrs.push(
$.ajax({
url: sURL + 'fileappeal/insert_app',
type:"POST",
dataType: 'text',
data: {'rn': rn},
error: function(data) {console.log('Error:'+rn+'_'+data);}
})
)
return jqxhrs;
}
});
}
有人对我如何解决服务器延迟问题并防止GET
在所有POST
方法完成之前调用 有任何建议吗?谢谢。