我试图建立一个论坛和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抛出一个非法调用错误。我不明白是什么问题。能否请您帮忙吗?而在此先感谢!
1)你有你的形式和您的JavaScript之间的一个错字错配:
<form id="formSubmit"
和$('#formSumbit')
- 它应该是$('#formSubmit')
相匹配的拼写。
data: new FormData(this), contentType: false
:2)除非你试图通过这个AJAX请求上传文件,那么你可以通过更换$(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/(在演示中,我改变了你的网址为假的,只所以会得到回应,但你可以看到我已经改变了它,并在注释掉的部分留下您的设置)。