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

javascript php

10911 просмотра

3 ответа

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

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

Автор: Madara Uchiha Источник Размещён: 12.11.2019 09:44

Ответы (3)


30 плюса

Решение

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

Как?

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

Последовательность HTTP

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

Так откуда же появляется JavaScript?

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

Последовательность с JavaScript

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

Где вписывается PHP?

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

Обновленная схема:

Последовательность с JavaScript и PHP

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


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

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

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

AJAX Sequence

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

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

Также см:

Автор: Madara Uchiha Размещён: 02.08.2014 10:11

18 плюса

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

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

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

Angsty cashier - это сервер, возможно, работает php.

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

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

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

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

Вы и МакБургер общаетесь по звуку. Браузеры и серверы общаются по HTTP.

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

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

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

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

% nc www.stackoverflow.com 80

"Уэлп, это ничего не делало, передо мной просто пустое приглашение!"

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

Только что.

Вглядываясь.

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

... В любом случае, мы должны сказать кассиру, что хотим гамбургер. В 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

Нажмите ввод дважды, и "святой bajesus, это большой выход!" Да, это человек.

Кролик, как это актуально?

Так, как это связано с 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!

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

Что случилось здесь, это разговор:

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

В заключение

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

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

Автор: Zirak Размещён: 02.08.2014 11:38

4 плюса

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

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

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

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

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

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

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

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

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

Автор: K.K. Smith Размещён: 02.08.2014 10:57
Вопросы из категории :
32x32