Имеется следующая архитектура проекта:
form.php - формирует страницу с формой, форма работает без
submit, данные передаются через ajax.db.php - работает с БД, обрабатывает всякую мудреную логикуВ файле db.php в процессе выполнения логики должны инициализироваться сообщения для пользователя, но без перезагрузки формы form.php.
Как это сделать?
Как инициализировать запуск JS c alert? А еще лучше bootstrap alert?
Как передать в этот JS значение переменой с текстом сообщения?
Ниже часть кода:
<?php
session_start();
header('Content-Type: application/json;charset=utf-8');
require_once("db_connection.php");
require_once("query_lib.php");
echo 'TECT ХХХХХХХХХХХХХХХХХХХ';
$docvalues = json_decode(stripslashes($_POST['formresult']), true);
if(isset($docvalues['docclass'])){ // проверяем устанволен ли тип документа (для корректировки)
$corr_doc_id = $docvalues['fixedItem']['property_fix2'];
$current_doc_fixed_items = serch_corrected_docs ($corr_doc_id, $connection); // получаем последнюю действующую запись документа
if ($current_doc_fixed_items == false) { //если запрос по id документа не нашел документа (или использовался id нового документа, или не найден)
$message = array('message' => 'ID документа не найден, попробуйте его изменить') ;
echo json_encode($message);
return $current_doc_fixed_items;
}
ajax. Ajax это просто запрос к серверу. Простыми словами вы просто обращаетесь к файлу, например db.php тем самым заставляя его выполниться на сервере точно так же, как если бы вы обратились, например через адресную строку. Просто обращаетесь. В зависимости от логики и переданных данных, например через POST, ваш скрипт db.php может выдавать разные результаты. Соответственно, если в ходе выполнения скрипта есть команда вывода, например echo, то и в ответе вы увидите, то что выведет эта команда.html формы (вход,регистрация), то прикладываю небольшой пример (bootstrap):<link rel="stylesheet" href="https://stackpath.bootstrapcdn.com/bootstrap/4.3.1/css/bootstrap.min.css" integrity="sha384-ggOyR0iXCbMQv3Xipma34MD+dH/1fQ784/j6cY/iJTQUOhcWr7x9JvoRxT2MZw1T" crossorigin="anonymous">
<form class="m-3">
<div class="form-group">
<label for="exampleInputEmail1">Email address</label>
<input name="email" type="email" class="form-control" id="exampleInputEmail1" aria-describedby="emailHelp" placeholder="Enter email">
<small id="emailHelp" class="form-text text-muted">We'll never share your email with anyone else.</small>
</div>
<div class="form-group">
<label for="exampleInputPassword1">Password</label>
<input name="password" type="password" class="form-control" id="exampleInputPassword1" placeholder="Password">
</div>
<div class="btn btn-primary check-login">Submit</div>
</form>
div с классом check-login (наша кнопка). При клике по кнопке собираем данные с полей и отправляем на сервер. Алгоритм, сбор и последующие действия по манипуляции с элементом form кладу на ваши плечи. Запрос отправляете на файл db.php. Можно всё сложить в переменную и отправить в формате json или отправить значение каждого поля отдельно, например по имени поля.db.php. Наверно, ваш ajax запрос будет реализован (передавать данные) по методу POST и в формате json. И если это так, то ваши данные можно вытащить так: $_POST['auth-data'] (произвольное название, вы использовать своё). Если вы отправили ваши данные по именам полей ввода, то принять их можно так: $_POST['email'], $_POST['password']. Обработку данных опущу. Далее вы формируете ответ. Тут вам надо определиться, какой тип данных вам отправлять? Лучше всего отправлять так же json. Формируете массив, например $request = [], в котором первый элемент хранит строку с информацией успех/провал, второй элемент, так же массив с сообщениями об успехах, и третий с сообщениями о неудачах (провалах). И там где вы выводили данные через echo, теперь добавляйте в массив. В конце скрипта конвертируете получившийся массив в json php функцией и выводите командой echo. ВЫВОД ДОЛЖЕН БЫТЬ ВСЕГО ОДИН РАЗ! Как сказал, @Mike, установите заголовок header('Content-Type: application/json;charset=utf-8');.json. Декодируйте её в массив. Потом, анализируя (перебирая элементы) можно понять как показать ответ пользователю, и нужно ли показывать его. На странице компонентов есть подробная инструкция.Удачи!
Итак резюмирую, поскольку я ранее не смог найти в сети понятное объяснение ответа на мой вопрос. Из JS вызывается ajax выполнение php файла:
$.ajax({
type: "POST",
url: "../php/db.php", // запускаем выполнение php-файла
data: data_sent_to_php, // передаем в php-файл данные для обработки
success: function(data){alert(data['message'])}; // выводим ответ php-файла которые он передает в п.2
});
Чтобы php файл отправил нам обратно нужные данные необходимо вставить в нем следующий код:
$message = array('message' => 'Ваше сообщение') ;
echo json_encode($message);
Основные этапы разработки сайта для стоматологической клиники
Продвижение своими сайтами как стратегия роста и независимости