Когда и где работает JavaScript, как насчет PHP? Могу ли я объединить два?

Когда работает язык на стороне клиента, например JavaScript, и когда работает серверный язык, например PHP? Как я могу смешивать оба?

Я хочу запустить функцию PHP при нажатии кнопки на моем сайте или запустить функцию JavaScript из PHP; это возможно?

Related of "Когда и где работает JavaScript, как насчет PHP? Могу ли я объединить два?"

Короткий ответ – Нет . Вы не можете запускать функции PHP из JavaScript [за исключением AJAX] , а также не можете запускать функции JavaScript из PHP. Два времени выполнения являются отдельными.

Как?

Чтобы понять, как взаимодействуют JavaScript и PHP, вы должны сначала понять основы протокола HTTP, который поддерживает сеть.

HTTP Sequence

На приведенной выше диаграмме демонстрируются основы протокола HTTP. Пользователь (вы) просит клиента (вашего браузера) получить вам страницу. Затем браузер запросит сервер (Google, в этом примере) для этой страницы. Сервер будет отвечать HTML-страницей, клиент анализирует эту страницу и запрашивает изображения, шрифты и любые другие ресурсы, необходимые для правильной загрузки страницы. Затем клиент представляет заполненную страницу пользователю.

Итак, где находится JavaScript?

JavaScript запущен в клиенте (т.е. в браузере). Таким образом, JavaScript запускается после того, как пришел ответ с сервера . Давайте добавим это к нашей диаграмме.

Sequence with JavaScript

Скрипты JavaScript запускаются, как только они загружаются , и будут продолжать работать, если у них есть прослушиватели событий, ожидающие событий от пользователя (например, щелчок, ввод или перемещение).

Где подходит PHP?

PHP работает на сервере , веб-сервер (который является программой, отвечающей за обслуживание веб-контента) будет запускать PHP в соответствии с его конфигурацией. PHP будет обрабатывать входные данные с веб-сервера и возвращать выходные данные. Этот вывод возвращается клиенту.

Обновленная диаграмма:

Sequence with JavaScript and PHP

Как вы можете видеть, выполнение PHP не сохраняется. Он выполняется, а затем заканчивается после отправки ответа.


Как вы можете видеть, между выполнением PHP и исполнением JavaScript нет совпадения, поэтому на самом деле невозможно сделать функцию на одном из них работать на основе ввода от другого.

Но .. но .. Я слышал об AJAX!

AJAX просто вызывает другой HTTP-запрос от JavaScript . Вы можете назвать это способом использования PHP-функций из JavaScript, но на самом деле это не совсем так.

AJAX Sequence

Как вы можете видеть, с AJAX JavaScript отправит запрос на сервер, который вызовет PHP, PHP снова запустится, как в обычном запросе (PHP не обязательно знает, что это даже запрос AJAX!), И сервер возвращает ответ на JavaScript, который использует его для работы.

В этом случае существует совпадение между временем выполнения PHP и временем выполнения JavaScript, поскольку JavaScript вызвал запрос.

Также см:

  • Как передать переменные и данные с PHP на JavaScript?

Добро пожаловать в McBurger, причудливый (да) правильный гамбургер. Запах высушенной смазки вторгается в ваши ноздри, заставляя кишечник просыпаться со смесью отвращения и восторга. Вы терпеливо ждете в очереди за матерью того, что должно быть человеческими детьми. Наконец, вы встретите подросткового кассира лицом к лицу, не без сожаления. Вы заказываете гамбургер (сюрприз) и картошку. Вы платите и немного ждете своего заказа.

Через некоторое время вы получите свой гамбургер, только чтобы узнать, что они забыли свой фри! Вы снова подходите к кассовому аппарату и просите их. Вы снова ожидаете, что картофель будет готов. Как только они, вы жрать все и уйти.

Какое это имеет отношение к чему-либо?

Англичанин-кассир – сервер, возможно, работает php.

Вы клиент, возможно, веб-браузер, способный понимать html / css / js.

Чтобы получить услугу, вы подходите к стойке и говорите: «Я хочу гамбургер». Затем МакБургер готовит и дает вам гамбургер.

Чтобы получить услугу, веб-браузер подходит к серверу и говорит «Я хочу эту страницу». Затем ваш сервер готовит и дает вам страницу.

Важнейшим аспектом этого является то, что между заказчиком и McBurger нет никакого смешения. Вы не будете готовить свои фри, и Мак-Бургер не будет пить ваш молочный коктейль. Точно так же веб-браузер не будет запускать php, и сервер не будет запускать javascript для вас. Если вы хотите, чтобы МакБургер дал вам свое знаменитое карамельное мороженое, вы должны подойти к стойке и попросить его. Если вы хотите, чтобы ваша веб-страница сохраняла что-то в БД при нажатии кнопки, вы должны обратиться к серверу и попросить его сделать это.

Вы и МакБургер обмениваетесь звуком. Браузеры и серверы обмениваются данными через HTTP.

Давайте посмотрим на HTTP.

Кролик, куда ты меня взял?

Если вы используете почти любой дистрибутив Linux или Mac, у вас есть netcat. Если вы работаете в Windows, извините, вам придется взять слово на следующий раздел или загрузить какой-либо порт nc или telnet-клиент.

В любом случае, откройте свой любимый терминал и давайте поговорим с каким-то сервером на порту 80 (порт http по умолчанию):

% nc www.stackoverflow.com 80 

«Уэлп, это ничего не значило, впереди меня просто пустое приглашение!»

Не волнуйтесь, случайный человек, с которым я общаюсь во время этих ответов, мы просто ничего не сказали серверу! В McBurger это было бы эквивалентом ходьбы до стойки и пристально глядя на кассира.

Просто.

Смотрящий.

Мы должны быстро начать использовать наши голосовые связки, или они вызовут безопасность. Я не могу вернуться к этой адской маре Марте, я просто … не могу .

… Anywho, нам нужно сказать кассиру, что мы хотим гамбургер. В http, который выдает запрос GET:

 % nc www.stackoverflow.com 80 GET / HTTP/1.1 

Хит вводится дважды, и ура, у нас есть выход!

 HTTP/1.1 400 Bad Request Content-Type: text/html; charset=us-ascii Date: Sat, 02 Aug 2014 10:55:16 GMT Content-Length: 334 <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01//EN""http://www.w3.org/TR/html4/strict.dtd"> <HTML><HEAD><TITLE>Bad Request</TITLE> <META HTTP-EQUIV="Content-Type" Content="text/html; charset=us-ascii"></HEAD> <BODY><h2>Bad Request - Invalid Hostname</h2> <hr><p>HTTP Error 400. The request hostname is invalid.</p> </BODY></HTML> 

Это не может быть хорошо. Множество вещей, которые я не понимаю, но это говорит о том, что имя хоста запроса недействительно. Давайте попробуем это снова, только мы дадим ему хозяин на этот раз:

 % nc www.stackoverflow.com 80 GET / HTTP/1.1 Host: stackoverflow.com 

Хит вводится дважды, и «святой байесус, это большой выход!» Да, человек.

Кролик, как это важно?

Итак, как это связано с php и некоторыми блок-схемами? Все еще думаете, что вы можете запустить php на клик? Давайте напишем «привет мир» в php и посмотрим, почему это невозможно.

Только по этому поводу я установил php и написал несколько файлов:

 # example.php <?php echo 'Hi mom!'; ?> 

Прохладный, давайте сделаем запрос и посмотрим, что происходит:

 % nc localhost 80 GET /example.php HTTP/1.1 Host: localhost 

Ритуал два введите ключи и:

 HTTP/1.1 200 OK Server: nginx/1.2.1 Date: Sat, 02 Aug 2014 11:00:52 GMT Content-Type: text/html Hi mom! 

Поздравляем, у нас есть собственный гамбургер! У нас есть сервер, на который мы можем отвечать клиентам! Радость для мира!

Здесь произошел этот разговор:

  • Me: Дайте мне /example.php .
  • Сервер: хорошо. Привет, php, запустите example.php
  • php: Что бы ни случилось. Результат – Hi mom!
  • Сервер: Там вы идете клиент, Hi mom!
  • Я: Спасибо!

В заключение

  • Сервер и клиент – это два отдельных существа.
  • Они обмениваются сообщениями по HTTP.
  • Если клиент чего-то хочет, он должен запросить у него сервер.
    • Что он делает, выполняя HTTP-запросы.

Бесстыдная самореклама: если вы хотите знать, как создавать HTTP-запросы из javascript, вы можете сослаться на мою суть по этому вопросу (предупреждение: содержит следы ругательных слов).

Другой ответ велик, но я просто попробую более простой подход.

Ваш браузер получает страницу с HTML и JavaScript с сервера. PHP работает на сервере, чтобы собрать последнюю страницу, которая отправляется в браузер. Он может проверять некоторые базы данных, выполнять некоторые вычисления и, возможно, подключаться к API, но по завершении всего он берет всю информацию и «распечатывает ее» на странице с кодом, который затем отправляется в ваш браузер.

Браузер получает страницу, и если на странице есть какой-либо Javascript или есть теги SCRIPT, которые тянут другие .js-файлы, он читает все это, а затем выполняет Javascript.

Таким образом, ваша страница «построена» PHP, и она может включать Javascript в это как-то, которое будет выполняться браузером, но эти два процесса обычно являются отдельными.

Вы можете заставить PHP «поговорить» с Javascript, выведя конкретный код JS на страницу.

Вы можете заставить Javascript «поговорить» с PHP, используя AJAX для связи с сервером во время выполнения страницы. Сервер может вернуть ответную информацию, которая затем снова интегрируется в страницу с помощью Javascript.

Но, как правило, эти два процесса работают в своих собственных мирах.

Вы можете сделать, что «кнопка запускает PHP-код» лучше всего с AJAX.

Запуск Javascript из «внутри» PHP на самом деле не сделан.