#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 на этот статус.