Jquery выдает ошибку «Незаконный вызов» - PullRequest
0 голосов
/ 05 февраля 2019

Я пытаюсь создать форум, и 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 голосов
/ 06 февраля 2019

1) У вас есть несоответствие опечаток между вашей формой и вашим JavaScript:

<form id="formSubmit" и $('#formSumbit') - должно быть $('#formSubmit'), чтобы соответствовать написанию.

2)Если вы не пытаетесь загружать файлы с помощью этого AJAX-запроса, вы можете упростить задачу, заменив data: new FormData(this), contentType: false просто данными: $(this).serialize().Это избавит от ошибки недопустимого вызова.

3) Запись dataType: 'json' означает, что jQuery автоматически попытается проанализировать данные, поступающие с сервера, как JSON, и преобразовать их.Следовательно, в вашей функции «success» 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 дляфальшивый, просто чтобы получить ответ, но вы можете увидеть, где я его изменил и оставил ваши настройки в закомментированной части).

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...