Доброго времени суток! Прошу прокомментировать правильно ли я понял работу примера, который описан в книге по PHP (тема про JSON-формат): есть три файла: json_index.php, json_index.js и json_answer.php код json_index.php: Код (Text): <!DOCTYPE html> <html lang="ru"> <head> <title>Передача JSON-данных</title> <meta charset='utf-8'> <script src="//code.jquery.com/jquery-1.11.3.min.js"></script> <script src="/json_index.js"></script> </head> <body> <p id='js-hello'>Здравствуйте!</p> <form action="/json_answer.php" method="GET"> <p>Имя: <input type="text" name="name" value="" /></p> <p>Фамилия: <input type="text" name="family" value="" /></p> <p><input type="submit" value="Представиться"><p> </form> </body> </html> код json_index.js: Код (Text): // Назначаем обработчики, только после полной загрузки документа $(function(){ // Обработчик нажатия на кнопку submit $('input[type=submit]').on('click', function(e){ // Предотвращаем обычное поведение элемента e.preventDefault(); // Формируем JSON из полей формы var json = { name: $('input[name=name]').val(), family: $('input[name=family]').val() } // Отправляем асинхронный POST-запрос по адресу // указанному в атрибуте action формы $.ajax({ url: $('form').prop('action'), method: 'POST', data: 'json=' + JSON.stringify(json) }) // В случае успешного получения ответа от сервера .done(function(msg){ // Заменяем надпись Здравствуйте в поле p#is-hello $('#js-hello').html(msg); }); }); }); код json_answer.php: Код (Text): <?php // Преобразуем JSON-данные в массив $arr = json_decode($_POST['json'], true); // Объединяем содержимое в строку $name = trim(implode(" ", $arr)); $result = "Здравствуйте"; if(!empty($name)) $result .= ", $name"; $result .= "!"; // Отдаем результат echo htmlspecialchars($result); ?> Правильно ли я понимаю, что это работает так: 1. когда мы заходим на json_index.php то открывается форма + сразу подключаются скрипты сode.jquery.com/jquery-1.11.3.min.js и json_index.js 2. после того как мы заполним поля Имя и Фамилия (например Иван Иванов), и нажмем кнопу "Представиться", то именно в этот момент управление перехватит скрипт json_index.js 3. после перехвата управления json_index.js отменяет обычное поведение, которое обычно происходит при нажатии (т.е. отправку данных в action="/json_answer.php" не происходит на этом этапе, даже не смотря на то что кнопку нажали) 4. далее json_index.js формируем JSON из полей формы 5. далее отправляет этот JSON в action="/json_answer.php" 6. в json_answer.php JSON переводится в нужную нам строку: "Здравствуйте, Иван Иванов!" 7. далее в json_answer.php строка с содержимым "Здравствуйте, Иван Иванов!" печатается с помощью echo в поток в поток в скрипт json_index.js (тут не совсем понял) 8. а, json_index.js проверяет: есть ли положительный ответ от сервера (в момент обращения к json_answer.php) и если да, то json_index.js заменяет в json_index.php содержимое между тегами <p id='js-hello'> </p> на то что напечатано в предыдущем 7-м пункте
как тут работает код PHP мне понятно. но с JS сталкиваюсь в первые и поэтому есть такие вопросы: function(msg) - в данном случае это код ответа от json_answer.php при обращении к нему скрипта, и этот код ответа равен тому что бы мы увидели если б json_answer.php напечатал бы нам в браузер echo htmlspecialchars($result), но он не печатает нам в браузер, а как бы печатает скрипту (в скрипт json_index.js) $('#js-hello').html(msg) - в данном случае означает что надо заменить содержимое тега <p id='js-hello'> ... </p> в открытой странице json_index.php, на то что было получено из json_answer.php (т.е. на htmlspecialchars($result)), без перезагрузки страницы json_index.php Верно ли я понял работу function(msg) и $('#js-hello').html(msg) ?
Скрипту на пыхе глубоко по-барабану, кто его вызывает: браузер из-за ввода пользователя, браузер через жабаскрипт или какой-нибудь CURL. Скрипт пыха отрабатывает, выводит свою строчку в свой вывод, как обычно. А вот поскольку на стороне браузера был вызов аяксом, браузер уже передаёт управление обратно. Когда-то статейку про это писал себе в блог: https://kramerblog.net/post/1
так понимаю аяксом был вызван из браузера скрипт json_answer.php. А что имеется ввиду "браузер уже передаёт управление обратно"? обратно кому/чему?