我有一個小表格,其中包含名字,姓氏和日期。點擊提交表單時,我希望它檢查數據庫是否有重複條目(使用Ajax),如果已有1條以上的條目,則提供確認窗口,以確認另一個提交。確認不應顯示是否沒有任何條目。PHP AJAX確認表單提交
出於某種原因,它似乎在沒有來自Ajax PHP頁面的結果的情況下呈現確認。如果我在xmlHttp.send(null)
行之後引入了一個警報,它會從PHP獲取文本(如所需),這讓我覺得我誤解了代碼執行的順序。下面是代碼:
的Javascript:
function check_duplicates() {
var first = document.getElementById('first_name').value;
var last = document.getElementById('last_name').value;
var date = document.getElementById('event_date').value;
var xmlHttp = GetXmlHttpObject();
if (xmlHttp == null) {
alert ("Your browser does not support AJAX!");
return;
}
var result = "ERROR - Ajax did not load properly";
var url="check_duplicate.php";
url=url+"?first="+first;
url=url+"&last="+last;
url=url+"&date="+date;
xmlHttp.onreadystatechange=function() {
if(xmlHttp.readyState==4) {
result = xmlHttp.responseText;
alert("RESULT="+result);
if(result != "clean") {
var validate = confirm(result);
return validate;
}
}
}
xmlHttp.open("GET",url,true);
var test = xmlHttp.send(null);
}
function GetXmlHttpObject() {
var xmlHttp = null;
try {
// Firefox, Opera 8.0+, Safari
xmlHttp=new XMLHttpRequest();
}
catch (e) {
// Internet Explorer
try {
xmlHttp=new ActiveXObject("Msxml2.XMLHTTP");
}
catch (e) {
xmlHttp=new ActiveXObject("Microsoft.XMLHTTP");
}
}
return xmlHttp;
}
PHP:
// DATABASE CONNECTION INFORMATION REMOVED
$first = $_GET['first'];
$last = $_GET['last'];
$date = date('Y-m-d',strtotime($_GET['date']));
$sql = "SELECT COUNT(*) AS count FROM Table WHERE First='$first' AND ".
"Last='$last' AND Date='$date'";
$result = mysql_query($sql);
$row = mysql_fetch_array($result);
if($row['count'] > 0) {
if($row['count'] == 1) {
echo "There is already an entry for ".$first." ".$last." on ".
date('M jS',strtotime($date)).".\n".
"Are you sure you want to submit this entry?";
}
else { // plural version of the same message
echo "There are already ".$row['count']." entries for ".$first." ".
$last." on ".date('M jS',strtotime($date)).".\n".
"Are you sure you want to submit this entry?";
}
} else {
echo "clean";
}
它提醒「結果=錯誤 - Ajax沒有正確加載」嗎? –
不,它會提示「RESULT =」,但正如我所說的,如果我在var test = xmlHttp.send(null)之後放置了一個簡單的警報,它會以正確的輸出(來自PHP)進行警報。這就是讓我困惑的函數調用的延遲/順序。 – Bing
啊,但你看到你已經設置結果的值爲「錯誤 - Ajax沒有正確加載」,這被覆蓋成爲空白。你的php在某處返回空白。雖然,我看不到它在哪裏。 –