簡體   English   中英

Ajax僅同步工作

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM