表单OnSubmit等待jQuery Ajax返回?
我想在表单onsubmit
上触发$.ajax
,并且只有在Ajax返回有效之后才return true
。
例如:
在Javascript中:
function ajaxValidation() { $.ajax({ async: false, type: "POST", url: "ajax.php", data: { myString: $("#myString").val() } }).success(function( response ) { alert(response); //Got 'ok' if (response=="ok") { return true; //mark-1 } else { alert("Oh, string is wrong. Form Submit is cancelled."); } }); return false; //mark-2 }
当我提交时,我得到警报,但它返回’假’,因为它跳到最终return false
线。
为什么? 我不明白。 实际上,应该return true
线。 (并且,即使在return true
,函数应该停在那里并且刚刚退出)
所以现在意味着,父函数does NOT wait
Ajax Return。 相反,它一直持续到最后。 请知道原因。 如何让父函数等待Ajax?
由于AJAX是异步的,因此使用提交按钮上的单击处理程序可以更好地validation。
以下是基于删除内联onSubmit
$(function() { var $form = $('#myForm'); $form.find('input[type="submit"]').click(function() { $.ajax({ /* async: false, this is deprecated*/ type: "POST", url: "ajax.php", data: { myString: $("#myString").val() } }).success(function(response) { alert(response); //Got 'ok' if(response == "ok") { /* submit the form*/ $form.submit(); } else { alert("Oh, string is wrong. Form Submit is cancelled."); } }); /* prevent default when submit button clicked*/ return false; }); });
标记1处的返回值是您的ajax请求的成功函数,而不是您的validation函数。 因此,即使它返回,它也仅从那里返回而不是从标记2的validationfunction返回