簡體   English   中英

AJAX表單未提交導致錯誤

[英]AJAX form not submitting that gives error

我在這里有我的AJAX代碼

$("#add-student").click(function(e) { 
    e.preventDefault(); 
    formData = $("#student-form").serialize(); 
    if (cleanFormInput()) {
        sendTheInfo(formData);
    } else { 
        shakeForm();
    }
});

function sendTheInfo(formData) { 
    $.ajax({ 
        type: "POST", 
        url: "../classes/ajax/postNewStudent.php",
        data: formData, 
        statusCode: {
            404: function() {
                alert( "page not found" );
            }
        },
        success: function(formData) { 
            console.log("New student submitted:\n" + formData);
        //clearForms();
        },
        error: function(result, sts, err) { 
            console.warn("Connection error:\n" + err + " : " + sts);
            console.log(result);
            shakeForm();
        },
        complete: function() { 
            console.log("Everything complete");
        }
    });
}

始終沒有失敗會輸出此錯誤: 連接錯誤:SyntaxError:意外的輸入結束:parsererror

但是仍然給出完整的消息: 一切都完成了

更新,PHP代碼在這里:

    require '../../core/init.php';
    require '../../classes/Config.php';

    header('Content-Type: application/json');

    if (!empty($_POST)) {

        $id = $_POST["sid"]; 
        $first = $_POST["first"];
        $last = $_POST["last"]; 
        $fav = "0";

        $sql = "INSERT INTO `students` (`id`, `first`, `last`, `active`) VALUES ('{$id}', '{$first}', '{$last}', '{$fav}')";

        $link = mysql_connect(Config::get('mysql/host'),Config::get('mysql/username'),Config::get('mysql/password')) or die("could not connect");;
        mysql_select_db(Config::get('mysql/db'), $link);

        $result = mysql_query($sql, $link);

        if ($result) {
            header('Content-Type: application/json');
            $student_data = $id . $first . $last . $fav;
            echo json_encode($student_data);
        }
    }

我有點困惑,我的Ajax設置錯誤嗎? 還是后端代碼中的其他錯誤? 我正在使用MySQL和jQuery 2.0.3

更新的代碼在這里: 這里

刪除了我的舊答案。 我認為這不是ajax / javascript錯誤。 絕對是PHP錯誤。 這是這行:

$student_data = $id . $first . $last . $fav;
echo json_encode($student_data);

$ student_data不是數組,而是一個字符串。 您需要將數組傳遞給json_encode函數

我看過你的代碼。 我從PHP端看到,您正在發送JSON對象。 但是您沒有為響應指定返回數據類型 嘗試在ajax調用中添加dataType。 也許那會解決問題

function sendTheInfo(formData) { 
$.ajax({ 
    type: "POST", 
    url: "../classes/ajax/postNewStudent.php",
    data: formData, 
    dataType : 'json',
    statusCode: {
        404: function() {
            alert( "page not found" );
        }
    },
    success: function(formData) { 
        console.log("New student submitted:\n" + formData);
    //clearForms();
    },
    error: function(result, sts, err) { 
        console.warn("Connection error:\n" + err + " : " + sts);
        console.log(result);
        shakeForm();
    },
    complete: function() { 
        console.log("Everything complete");
    }
});
}

應該注意的是,即使后端沒有返回結果,Ajax COMPLETE方法也會觸發。

complete: function() { 
        console.log("Everything complete");
    } 

因此,即使ajax調用“完成執行”,即使提交失敗,它也會顯示日志條目。

我也建議不要有2個標頭或相同的聲明(您有一個頂部,並且在if(result)調用中有一個。

在注釋線程中,您指出您正在服務器上工作,而不是在本地工作,因此這意味着您存在一些路徑問題。 檢查你的

  ../ 

相對路徑樣式的網址,並確保您擁有相同的基點。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

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