Ошибка синтаксиса: неожиданный конец ввода JSON

#json #ajax #forms #record

#json #ajax #формы #запись

Вопрос:

Я могу записывать данные в свою базу данных, но загрузка ajax не влияет на метод успеха. В чем проблема?

 error: "SyntaxError: Unexpected end of JSON input
    at Object.parse (native)
    at n.parseJSON "
  

record_data.php

 <?php
$type=getPar_empty("type",$_GET,"");
$new_nome=$_GET['new_nome'];
$new_cognome=$_GET['new_cognome'];
$new_email=$_GET['new_email'];
$new_lingua=$_GET['new_lingua'];
if ($type=="add_user"){
  $stmt=null;
  $stmt=$db->prepare("INSERT INTO newsletter_utenti(email,abilitato,nome,cognome,lingua,lista,data_creazione,unsubscribe) VALUES('$new_email',1,'$new_nome','$new_cognome','$new_lingua','manual',now(),0)");
  if (!$stmt) {
    log_msg($db->error);
    die();
  }
  $stmt->execute();
  $stmt->close();
  $db->close();
}
?>
  

скрипт

    $("#salvaBtn").click(function(){
  var nome = $('#nome').val();
  var cognome = $('#cognome').val();
  var email = $('#email').val();
  var lingua = $('#lingua').val();
  var dataString = 'nome=' nome 'amp;cognome=' cognome 'amp;email=' email 'amp;lingua=' lingua 'amp;type=add_user';
  $.ajax({
    type:'GET',
    data:dataString,
    url:"record_data.php",
    success:function(result) {
              $("#status_text").html(result);
              $('#nome').val('');
              $('#cognome').val('');
              $('#email').val('');
    },
    error:function(xhr,status,error) {
      console.log(error);
    }
  });
});

$('#adduser').submit(function (){
  return false;
});
  

форма

 <form name="adduser" id="adduser" method="GET" action="#">
            <div class="col-md-3">
              <div class="form-group m-b-30">
                <p>E-mail</p>
                <input class="form-control" type="email" id="email" name="email" placeholder="indirizzo e-mail" email required>
              </div>
            </div>
            <div class="col-md-3">
              <div class="form-group m-b-30">
                <p>Nome</p>
                <input class="form-control" type="text" id="nome" name="nome" placeholder="nome">
              </div>
            </div>
            <div class="col-md-3">
              <div class="form-group m-b-30">
                <p>Cognome</p>
                <input class="form-control" type="text" id="cognome" name="cognome" placeholder="cognome">
              </div>
            </div>
            <div class="col-md-3">
              <div class="form-group m-b-30">
                <p>Lingua</p>
                <select class="form-control" id="lingua" name="lingua">
                  <option value="it">IT</option>
                  <option value="en">EN</option>
                </select>
              </div>
              <input type="submit" class="btn btn-embossed btn-primary m-r-20" id="salvaBtn" value="Aggiungi utente"></input>
              <div id="status_text" /></div>
            </div>
          </form>
  

Ответ №1:

ваш вызов jquery ajax должен включать

dataType: 'html',

чтобы явно указать, что данные, возвращаемые с сервера, являются html

на самом деле вы берете result и помещаете его прямо в узел DOM с идентификатором statusText


Тогда вам нужно исправить серьезную проблему: ваш PHP-скрипт не возвращает ( echo не возвращает) никаких данных!


Нижняя заметка: вам действительно следует использовать mysqli для ваших запросов к БД http://php.net/manual/en/book.mysqli.php а также используйте подготовленные операторы для создания запроса (вместо создания SQL-запроса путем объединения строк).

Комментарии:

1. Спасибо, Паоло, ты решил мою проблему! Я также ценю вашу драгоценную помощь и разъяснения. У меня к вам вопрос новичка: Почему PHP-скрипт должен возвращать данные? Заранее благодарю вас

2. PHP-скрипт не обязательно должен возвращать данные обратно. Он может выполнять свою работу и завершаться беззвучно. Но в вашем примере запрос AJAX ожидает возврата данных, поэтому PHP-скрипт должен что-то отправить! Если по какой-либо причине PHP-скрипт может завершиться с ошибкой (например, невозможно выполнить запись в БД), то хорошей практикой является возврат скриптом статуса успеха / сбоя и проверка кода javascript на этот статус.