Разлагаемые формы jquery ajax с PHP - повторение кода
Предполагая, что у меня есть форма, которую я хочу отправить. Я построил это и форму action=""
, Таким образом, я могу получить доступ к опубликованным данным через if(isset($_POST['something']))
ПРИМЕР form.php (КОД НЕ ПРОВЕРЕН И ТОЛЬКО ДЛЯ ТОГО, ЧТОБЫ ПОКАЗАТЬ ТОЧКУ):
<?php
$result = '';
if (isset($_POST['something']) {
$sql = 'SELECT * FROM aTable WHERE Name = :name';
$stmt = $db->prepare($sql);
$stmt->execute(array(':name' => $_POST['something']);
$result = $stmt->fetchAll(PDO::FETCH_ASSOC);
}
?>
<form action="" method="post">
<input type="text" name="something" />
<input type="submit" value="post" />
</form>
<div id="result">
<pre>
<?php echo $result; ?>
</pre>
</div>
Теперь я хочу обработать форму с помощью jquery/js, если у пользователя включена функция js.
Я знаю, как это сделать. Однако у меня есть проблема с доступом к базе данных, например, с тем же запросом в 2 файлах php. Один на моей оригинальной странице формы, который используется, когда js он выключен и возвращает ассоциативный массив данных. Затем у меня есть ajaxData.php, который возвращает json, но в основном тот же SQL-запрос.
ПРИМЕР AJAXDATA.php
<?php
$result = '';
if (isset($_POST['something']) {
$sql = 'SELECT * FROM aTable WHERE Name = :name';
$stmt = $db->prepare($sql);
$stmt->execute(array(':name' => $_POST['something']);
$result = $stmt->fetchAll(PDO::FETCH_ASSOC);
echo json_encode($result);
}
?>
На мой взгляд, это неэффективно, потому что я пишу один и тот же код, один и тот же доступ к данным и т.д.... дважды - один раз для form.php и один раз для ajaxdata.php.
Как мне структурировать мои формы / файлы так, чтобы ajax использовал тот же доступ к базе данных и SQL-код, что и обычная форма отправки?
1 ответ
Для изменения HTML
добавлять onSubmit
событие для обработки js
включить выключить
<form action="" method="post" onSubmit="return process_ajax();">
<input type="text" name="something" />
<input type="submit" value="post" />
</form>
в precess_ajax()
вернуть false, чтобы форма не была отправлена, и если js
отключенная форма будет отправлена. Все параметры должны быть такими же, как если бы форма была размещена. Отправить дополнительный параметр в AJAX
сказать ajaxForm
чтобы проверить на стороне сервера, если пост по форме или AJAX
Теперь для серверного PHP-кода. Проверьте дополнительный параметр. ajaxForm
если он установлен или имеет значение, которое вы отправили в AJAX
Отправить JSON
ответ еще отправить HTML-страницу. Ваш код будет выглядеть так
if (isset($_POST['something']){
$sql = 'SELECT * FROM aTable WHERE Name = :name';
$stmt = $db->prepare($sql);
$stmt->execute(array(':name' => $_POST['something']);
$result = $stmt->fetchAll(PDO::FETCH_ASSOC);
if(isset($_POST['ajaxForm'])){
//send JSON response
}
else{
//show html page here
}
}
?>