我有一个包含许多inpute文本字段的表单字段。一些领域期望一些类似的数据,因此我给了他们一个共同的类。请求使用ajax处理。对于每个输入字段,请求将单独传递,使用.each(function()
作为输入字段。以下是基本代码;
$('#mybutton').click(function(){
var flag1 = 0;
var flag2 = 0;
$('.input_text_field').each(function(){
var current = $(this);
var curvalue = current.val();
if(curvalue != ""){
$.ajax({
type: 'POST',
url: 'ajaxhandler.php',
data: 'item='+curvalue,
cache: false,
async: false,//would like to remove this
success: function(result) {
if(result == "true"){
flag1++;
}else{
flag2 = 1;
}
}
});
}
});
if(flag2 == 0 && flag1 > 0){ //this happens before the ajax request(s) completes (if asyc:true), I think.
alert(flag1);
}else{
alert("false, "+flag1);
}
});
ajax回复可能是“true”或“false”。我想计算“真实”的回复,并且如果有任何“错误”回复,也想设置一个标志。为了实现这一点,我使用了2个本地标志(最初为0),flag1
(用于计算“真实”回复)和flag2
(以确定是否有任何错误回复)。< / p>
如果(flag2 == 0 && flag1 > 0)
,我想做点什么。为了使flag1
增量,我设置了async: false
,但我得到了很多反馈,禁用async
不是一个好习惯,所以我想摆脱它。有没有办法实现相同而不禁用async
?
答案 0 :(得分:0)
现在,我还没有尝试过这段代码,您可能需要对其进行一些调整,但我认为这些方面的内容可行:
var getData = function( val ){
return {
$.ajax('ajaxhandler.php', {
data: { value: val },
dataType: 'json'});
}
}
$('#mybutton').click(function(){
var flag1 = 0;
var flag2 = 0, deferreds = [];
$('.input_text_field').each(function(){
var currentVal = $(this).val();
if(!!currentVal){
deferreds.push(getData(curvalue).then(function(resp){
(resp == "true") ? flag1 += 1 : flag2 = 1;
}));
}//End if
}); //End each
$.when.apply(window, deferreds).then(function(){
//put callback code here
if(flag2 == 0 && flag1 > 0){
alert(flag1);
}else{
alert("false, "+flag1);
}
});
});//End click
不确定为什么要单独循环输入字段和ajax,尽管序列化表单并立即发送。但我相信你有充分的理由想要做什么。
同样,我还没有尝试过这段代码。我刚刚在手机上写了这个。但理论上它应该有用。