经过一些调试后,似乎每个语句之后的代码都在每个语句完成之前执行。
我还注意到每个功能都循环了两次。
这就是:
因此,在每个语句中将ErrorFound设置为1之前,似乎会触发警报(ErrorFound)。但是当我对它施加延迟时,它似乎赶上并显示出应该是什么值,即1。
var ErrorFound;
$(document).ready(function(){
$(document).delegate("#ProductsSubmit", 'click', function(){
alert('Event Triggered');
ErrorFound = 0;
$(".AddProduct").each(function(){
var IDToConfirm = $(this).attr('id');
var SKUToConfirm = $(this).val();
$("#"+IDToConfirm).removeClass("InputError");
$.get('http://www.example.com/script.php?s='+SKUToConfirm+'&ut='+IDToConfirm, function(data) {
var VerifyData = jQuery.parseJSON(data);
if(VerifyData['Valid']!='Yes') { ErrorFound = 1; $("#"+VerifyData['ID']).addClass("InputError"); }
});
});
// Alert box shows value as 0
alert(ErrorFound);
setTimeout("AlertError()", 5000);
return false;
});
});
function AlertError() {
// Alert box shows value as 1
alert(ErrorFound);
}
发生了什么事?我已经尝试了很多工作,但没有找到任何可行的工作。
答案 0 :(得分:0)
请记住,无论您的ajax调用状态如何,您的.each循环都将继续运行。 ajax调用响应回调函数,并且不像代码的其余部分那样是程序性的。
当预期只有两次迭代时执行4次调用的问题,这是一个棘手的问题。我会说尝试使用除委托之外的其他选择方法来测试不同但类似场景中的行为(你可以使用.click,.on('click'),. bind('click'),. live('click')< - deprecated)..只需检查一下即可获得更全面的图片。
答案 1 :(得分:0)
您正在被重定向。你真的使用过这个网址吗?