我正在尝试创建一个论坛,jQuery抛出“非法调用”错误。
这是我的jquery代码:
$('#formSumbit').on('submit', function(e) {
e.preventDefault();
$.ajax({
url: 'data-get.php',
type: 'POST',
data: new FormData(this),
contentType: false,
dataType: 'json',
success: function(value) {
var serialize = $.parseJSON(value);
if (serialize.success == 'false') {
$('.alert').fadeIn().delay(3000).fadeOut();
$('.alert-msgText').html(serialize.datamsg);
}
}
});
});
这是我的PHP代码:
<?php
$user = $_POST['user'];
$msg = $_POST['message'];
if(empty($user)&&empty($message)) {
$data = array(
'success' => 'false',
'datamsg' => 'Please fill the textboxes'
);
echo json_encode($data);
} else {
mysqli_query($con,"INSERT INTO forums(name,message) VALUES ('$user','$msg')");
$data = array(
'success' => 'true',
'datamsg' => 'Done!'
);
echo json_encode($data);
}
exit();
?>
当文本框为空并且我单击“提交”按钮时,似乎没有任何效果,jQuery抛出非法调用错误。我不明白问题是什么。你能帮忙吗? 并预先感谢!
答案 0 :(得分:0)
1)您的表单和JavaScript之间有错别字:
<form id="formSubmit"
和$('#formSumbit')
-应该为$('#formSubmit')
以匹配拼写。
2)除非您尝试通过此AJAX请求上载文件,否则可以通过将data: new FormData(this), contentType: false
替换为$(this).serialize()
数据来简化操作。这将消除非法调用错误。
3)编写dataType: 'json'
意味着jQuery将自动尝试将来自服务器的数据解析为JSON并将其转换。因此,在您的“成功”函数中,value
已被解析并转换为对象。因此,不必使用$.parseJSON
。例如,您可以直接访问value.success
。
这是固定版本:
$('#formSubmit').on('submit', function(e) {
e.preventDefault();
$.ajax({
url: 'data-get.php',
type: 'POST',
data: $(this).serialize(),
dataType: 'json',
success: function(value) {
if (value.success == 'false') {
$('.alert').fadeIn().delay(3000).fadeOut();
$('.alert-msgText').html(value.datamsg);
}
}
});
});
正在运行的演示:https://jsfiddle.net/khp5rs9m/2/(在演示中,我将您的URL更改为伪造的URL,只是这样它会得到响应,但是您可以看到我对其进行了更改,并将您的设置保留在注释掉的位置)部分)。