[英]Ajax only works synchronously
我有設置我的ajax請求的代碼:
function sendAjaxRequest() {
ajax.open("post", "form.php", false);
ajax.setRequestHeader("Content-Type", "application/json");
ajax.onreadystatechange = gotResponseFromServer();
ajax.send(jsonObject);
}
而這個執行請求的php:
<?php
require_once "database_connection.php";
con = mysqli_connect($host, $user, $password,$db) OR die("Failed to connect to MySQL: " . mysqli_connect_error());
$data = file_get_contents("php://input");
$decodedData = json_decode($data);
//$verifyCode = md5(rand()."");
$name = $decodedData->{'name'};
$surname = $decodedData->{'surname'};
$email = $decodedData->{'email'};
$phone = $decodedData->{'phone'};
$birthDate = $decodedData->{'birthDate'};
$studies = $decodedData->{'studies'};
$work = $decodedData->{'work'};
$married = $decodedData->{'married'};
$skills = $decodedData->{'skills'};
$hobby = $decodedData->{'hobby'};
$city = $decodedData->{'city'};
$gender = $decodedData->{'gender'};
$baptized = $decodedData->{'baptized'};
$suggestions = $decodedData->{'suggestions'};
$sql = "INSERT INTO Voluntari (_name, _surname, _email, _phone, _birthDate, ".
"_studies, _work, _married, _skills, _hobby, _city, _gender, _baptized, _suggestions) ".
"VALUES ('$name', '$surname', '$email', '$phone', '$birthDate', '$studies', '$work', '$married',".
"'$skills', '$hobby', '$city', '$gender', '$baptized', '$suggestions' );";
if(!mysqli_query($con,$sql)) {
die('Error: ' . mysqli_error($con));
} else {
//sendConfirmationMail();
echo "added";
}
mysqli_close($con);
?>
問題是我無法異步發出ajax請求,也不知道為什么。 如果我以同步方式進行操作,則表單數據將添加到數據庫中,但是如果以異步方式進行操作,則ajax.status
始終為0,而ajax.readyState
為1。
要將請求從異步更改為同步,請在此處輸入false
:
ajax.open("post", "form.php", false);
^^^^^
我究竟做錯了什么? 以及如何保持我的請求異步並使腳本正常工作?
例如,如果您在此處查看: http : //www.w3schools.com/ajax/ajax_xmlhttprequest_send.asp,您將看到參數描述如下:
open(method,url,async)
方法:請求的類型:GET或POST
url:文件在服務器上的位置
異步: 真(異步)或假(同步)
為了使您的請求異步,您將必須調用ajax.open("post", "form.php", true);
除非對您的函數gotResponseFromServer
的調用返回了另一個函數,否則它應該是
ajax.onreadystatechange = gotResponseFromServer;
也就是說,您想將一個函數分配給onreadystatechange,而不是其返回值。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.