ajaxリクエストを同期させるにはどうすればよいですか?
提出が必要なフォームがあります。ただし、ユーザーが正しいパスワードを入力した場合にのみ送信する必要があります。
フォームコードは次のとおりです。
<form name="form" action="insert.php" method="post" onSubmit="return ajaxSubmit(this);" >
そして、パスワードを送信してチェックするためのjqueryコードは次のとおりです。
var ajaxSubmit = function(formE1) {
var password = $.trim($('#employee_password').val());
$.ajax({
type: "POST",
async: "false",
url: "checkpass.php",
data: "password="+password,
success: function(html) {
var arr=$.parseJSON(html);
if(arr == "Successful") {
return true;
} else {
return false;
}
}
});
}
ただし、フォームは、ajaxリクエストによって返される値に関係なく、常に送信されます。私は他のすべてをチェックしました。正しいパスワードが入力されると、arrの値は「成功」し、その逆も正しく機能します。
このリクエストを同期させるにはどうすればよいですか?デバッグできる限り、リクエストは非同期であるため、リクエストが完了する前にフォームが送信されます。
checkpass.phpのコード
<?php
require("includes/apptop.php");
require("classes/class_employee.php");
require("classes/class_employee_attendance.php");
$employee_password=$_POST['password'];
$m=new employee();
$m->setbyid_employee(1);
$arr=$m->editdisplay_employee();
if($arr['employee_password'] == $employee_password)
{
$res="Successful";
}
else
{
$res="Password not match";
}
echo $res;
?>
更新:解決策が見つかりました。
Olaf Dietshcheが指摘したように、の戻り値はの戻り値でajaxSubmit
はありませんsuccess: function(){...}
。ajaxSubmit
値をまったく返しません。これは、と同等undefined
であり、次に評価されtrue
ます。
そしてそれが理由で、フォームは常に送信され、リクエストを同期的に送信するかどうかに依存しません。
そこで、1
成功時に変数をinsidesuccess関数に設定しました。そして、成功関数からその値をチェックしました。それが1
成功関数の外にある場合は、と書きreturn true ... else return false
ました。そしてそれはうまくいった。
更新された作業コード:
var ajaxsubmit=function(forme1) {
var password = $.trim($('#employee_password').val());
var test="0";
$.ajax({
type: "POST",
url: "checkpass.php",
async: false,
data: "password="+password,
success: function(html) {
if(html == "Successful") {
test="1";
} else {
alert("Password incorrect. Please enter correct password.");
test="0";
}
}
});
if(test=="1") {
return true;
} else if(test=="0") {
return false;
}
}