Javascript jquery表单发送ajax
在提交表单之前,我要运行以下验证脚本:Javascript jquery表单发送ajax,javascript,jquery,ajax,Javascript,Jquery,Ajax,在提交表单之前,我要运行以下验证脚本: function validateMyForm(){ var numberTo = $('.to').length $('.to').each(function(){ var product_id = $(this).closest('tr').find('input').get(0).id; var todate = $(this).val(); var from = $(this
function validateMyForm(){
var numberTo = $('.to').length
$('.to').each(function(){
var product_id = $(this).closest('tr').find('input').get(0).id;
var todate = $(this).val();
var from = $(this).prev().prev().val();
$.ajax({
type: 'POST',
url: myBaseUrl + 'Products/ajax_change_date',
dataType: 'json',
data: {
id: product_id,
todate: todate,
from: from
},
success: function (data) {
numberTo--;
}
});
});
while(numberTo != 0){
}
return true;
}
然而,当我运行这个程序时,firefox中会出现一个消息框,说它正在等待脚本完成
如何在保留ajax的同时避免这种情况?使用:
while(numberTo != 0){
}
您创建无限循环,并且您的纸条停止执行。这就是为什么在Firefox上出现此错误
您需要有回调来检查numberTo
变量
例如:
function validateMyForm(){
var numberTo = $('.to').length;
function checkNumberTo() {
if( numberTo === 0 ) {
alert( 'AJAX Completed' );
// here you should include your code to manually submit the form
}
}
$('.to').each(function(){
var product_id = $(this).closest('tr').find('input').get(0).id;
var todate = $(this).val();
var from = $(this).prev().prev().val();
$.ajax({
type: 'POST',
url: myBaseUrl + 'Products/ajax_change_date',
dataType: 'json',
data: {
id: product_id,
todate: todate,
from: from
},
success: function (data) {
numberTo--;
checkNumberTo()
}
});
});
return false;
}
使用:
您创建无限循环,并且您的纸条停止执行。这就是为什么在Firefox上出现此错误
您需要有回调来检查numberTo
变量
例如:
function validateMyForm(){
var numberTo = $('.to').length;
function checkNumberTo() {
if( numberTo === 0 ) {
alert( 'AJAX Completed' );
// here you should include your code to manually submit the form
}
}
$('.to').each(function(){
var product_id = $(this).closest('tr').find('input').get(0).id;
var todate = $(this).val();
var from = $(this).prev().prev().val();
$.ajax({
type: 'POST',
url: myBaseUrl + 'Products/ajax_change_date',
dataType: 'json',
data: {
id: product_id,
todate: todate,
from: from
},
success: function (data) {
numberTo--;
checkNumberTo()
}
});
});
return false;
}
如果您想要一个更优雅的解决方案,您可能需要尝试promise库。 下面是一篇文章,介绍了使用回调的缺点及其解决方案-承诺。这篇文章很长,但值得一读 要了解这一新概念如何应用于您,您应该尝试研究Promise composition,这是我在Google上找到的第一篇关于这一点的文章: var x=10;var promise1=Q($.ajax(…)。然后(函数(){ x=20;}); var promise2=Q($.ajax(…)。然后(函数(){ x=30;}) var groupPromise=Q.all([promise1(),promise2()) groupPromise.then(函数(结果){},console.error)//Kris Kowal的示例 承诺l和承诺2并行执行,人们不知道哪一个将首先实现。 以下是两个相关的promise库: