jQuery引发“非法调用”错误

时间:2019-02-05 14:49:21

标签: javascript php jquery html html5

我正在尝试创建一个论坛,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 个答案:

答案 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,只是这样它会得到响应,但是您可以看到我对其进行了更改,并将您的设置保留在注释掉的位置)部分)。