我在提交表单时调用了JavaScript函数,但是在完成提交函数之前表单已经提交。如果我在onsubmit函数中使用alert它首先完成函数然后提交表单。我使用settimeout函数代替警报但它没有用。如何在提交完成后提交表格。
function chat1close(name){
var abc;
abc=window.frames[0].test();
$.ajax({
type:'GET',
url:'modules/closechat.php?abc='+abc+'&name='+name,
success:function(data){
}
});
document.getElementById("hello").innerHTML=" ";
alert("yes");
return true;
}
答案 0 :(得分:1)
将async: false
添加到您的ajax调用中。这将阻止它在函数返回之前执行函数的其余部分。
答案 1 :(得分:1)
如果chat1close
是表单上正在执行的函数,并且您希望代码执行synchronously
,请在.ajax
请求中设置以下选项:
async:false,
答案 2 :(得分:1)
在函数完成之前不会发送表单,但是您在函数中进行异步AJAX调用,并在AJAX响应到达之前发送表单并调用成功回调函数。
在发送表单之前进行AJAX调用的唯一方法是使用同步AJAX调用,但这会在等待响应时冻结浏览器:
function chat1close(name){
var abc = window.frames[0].test();
$.ajax({
type: 'GET',
async: false,
url: 'modules/closechat.php?abc='+abc+'&name='+name,
success:function(data){
document.getElementById("hello").innerHTML=" ";
alert("yes");
}
});
return true;
}
但是,您可以停止发送表单,而是在AJAX响应到达后发送表单:
function chat1close(name){
var abc = window.frames[0].test();
$.ajax({
type: 'GET',
async: false,
url: 'modules/closechat.php?abc='+abc+'&name='+name,
success:function(data){
document.getElementById("hello").innerHTML=" ";
alert("yes");
$('#IdOfTheForm')[0].submit();
}
});
return false;
}
答案 3 :(得分:1)
简单的方法:
var $form = jQuery("#the_form");
var should_submit = false;
$form.submit(function () {
if (should_submit)
return true;
$.post('some/async/thing', function () {
//This is an async callback that
//will set the should submit var to true and resubmit form.
should_submit = true;
$form.submit(); //will now submit normally because should_submit is true.
});
return false;
});