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