我这里有我的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
此处更新了代码:here
答案 0 :(得分:0)
删除了我的旧答案。我不认为这是一个ajax / javascript错误。它绝对是一个PHP错误。这就是:
$student_data = $id . $first . $last . $fav;
echo json_encode($student_data);
你$ student_data不是一个数组,它只是一个字符串。您需要将数组传递到json_encode
函数
答案 1 :(得分:0)
我看过你的代码。我从PHP端看到你发送了一个JSON对象。但是您没有为响应指定返回 dataType 。尝试在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");
}
});
}
答案 2 :(得分:0)
应该注意,即使后端没有返回结果,Ajax COMPLETE方法也会触发。
complete: function() {
console.log("Everything complete");
}
因此,即使提交失败,也会在每次ajax呼叫完成执行后显示日志条目。
我还建议不要有2个标题或相同的声明(你有一个在顶部,一个在if(结果)调用。
在评论主题中,您指出您在服务器上工作但不在本地工作,因此这意味着您有一些路径问题。检查你的
../
相对路径样式的网址,并确保您具有相同的基点。