2016-10-17 3 views
0

Я могу записывать данные в моем db, но загрузка ajax не влияет на метод успеха. В чем проблема?SyntaxError: Неожиданный конец ввода JSON

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+'&cognome='+cognome+'&email='+email+'&lingua='+lingua+'&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


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


Нижняя нота: вы действительно следует использовать MySQLi для БД запросов http://php.net/manual/en/book.mysqli.php, а также использовать подготовленные заявления для создания запроса (вместо создания запроса SQL с помощью конкатенации строк).

+0

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

+0

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

+0

Получил суть! Спасибо огромное! :) – Otto

Смежные вопросы