В чем разница между программированием на стороне клиента и на стороне сервера?

У меня есть этот код:

<script type="text/javascript">
var foo = 'bar';
<?php
file_put_contents('foo.txt', ' + foo + ');
?>

var baz = <?php echo 42; ?>;
alert(baz);
</script>

Почему это не пишет «бар» в мой текстовый файл, но предупреждает «42»?


NB: более ранние версии этого вопроса были явно о PHP на сервере и JavaScript на клиенте. Сущность проблемы и решения одинаковы для любой пара языков, когда один работает на клиенте, а другой на сервере. Пожалуйста, примите это во внимание, когда вы увидите ответы, говорящие о конкретных языках.

428

Решение

Ваш код разделен на две совершенно разные части, серверная сторона и сторона клиента.

                    |
---------->
HTTP request
|
+--------------+    |    +--------------+
|              |    |    |              |
|    browser   |    |    |  web  server |
| (JavaScript) |    |    |  (PHP etc.)  |
|              |    |    |              |
+--------------+    |    +--------------+
|
client side       |      server side
|
<----------
HTML, CSS, JavaScript
|

Обе стороны общаются через HTTP-запросы и ответы. PHP выполняется на сервере и выводит некоторый HTML и, возможно, код JavaScript, который отправляется как ответ клиенту, где интерпретируется HTML и выполняется JavaScript. Когда PHP завершит вывод ответа, сценарий завершится, и на сервере ничего не произойдет, пока не поступит новый HTTP-запрос.

Пример кода выполняется так:

<script type="text/javascript">
var foo = 'bar';
<?php
file_put_contents('foo.txt', ' + foo + ');
?>

var baz = <?php echo 42; ?>;
alert(baz);
</script>

Шаг 1, PHP выполняет весь код между <?php ?> теги. Результат таков:

<script type="text/javascript">
var foo = 'bar';

var baz = 42;
alert(baz);
</script>

file_put_contents вызов не привел ни к чему, он просто записал «+ foo +» в файл. <?php echo 42; ?> вызов привел к выводу «42», который сейчас находится в том месте, где раньше был этот код.

Этот результирующий код HTML / JavaScript теперь отправляется клиенту, где он оценивается. alert звонок работает, пока foo переменная нигде не используется.

Весь код PHP выполняется на сервере еще до того, как клиент начнет выполнять любой из JavaScript. В ответе не осталось PHP-кода, с которым мог бы взаимодействовать JavaScript.

Чтобы вызвать некоторый код PHP, клиент должен будет отправить новый HTTP-запрос на сервер. Это может произойти с использованием одного из трех возможных методов:

  1. Ссылка, которая заставляет браузер загрузить новую страницу.
  2. Отправка формы, которая отправляет данные на сервер и загружает новую страницу.
  3. AJAX запрос, который является техникой Javascript, чтобы сделать регулярный HTTP-запрос к серверу (как 1. и 2. будет), но не покидая текущей страницы.

Вот вопрос с изложением этих методов более подробно

Вы также можете использовать JavaScript, чтобы браузер открывал новую страницу, используя window.location или отправьте форму, эмулирующую возможности 1. и 2.

408

Другие решения

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

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

Изображение из wikipedia_http: //en.wikipedia.org/wiki/File: Scheme_dynamic_page_en.svg
изображение

Таким образом, вы можете легко увидеть, что серверный язык обрабатывает HTTP-запрос и обрабатывает его, как сказал @deceze. PHP выполняется на сервере и выводит некоторый HTML и, возможно, код JavaScript, который отправляется как ответ клиенту, где интерпретируется HTML и выполняется JavaScript.

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

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

Поэтому, когда вы делаете HTTP запрос на сервере. Сервер сначала внимательно читает файл PHP, чтобы выяснить, есть ли какие-либо задачи, которые необходимо выполнить, и отправить ответ клиентской стороне и снова, как сказал @deceze *. Как только PHP завершил вывод ответа, сценарий завершается, и ничего будет происходить на сервере до нового HTTP запрос приходит. *

Графическое представление

Источник изображения

Итак, что я могу сделать, если мне нужно вызвать PHP? Это зависит от того, как вам нужно это сделать: либо перезагрузив страницу, либо используя вызов AJAX.

  1. Вы можете сделать, перезагрузив страницу и отправив HTTP запрос
  2. Вы можете сделать вызов AJAX с помощью JavaScript, и это не требует перезагрузки страницы

Хорошо для чтения:

  1. Википедия: Серверные скрипты
  2. Википедия: скрипты на стороне клиента
  3. Мадара Учиха: Разница между программированием на стороне клиента и на стороне сервера
146

Ваш Javascript будет выполняться на клиенте, а не на сервере. Это означает, что foo не оценивается на стороне сервера, и поэтому его значение не может быть записано в файл на сервере.

Лучший способ подумать об этом процессе — создать динамический текстовый файл. Текст, который вы генерируете, становится исполняемым кодом только после того, как браузер его интерпретирует. Только то, что вы помещаете между <?php Теги оцениваются на сервере.

Кстати, привычка встраивать случайные фрагменты логики PHP в HTML или Javascript может привести к получению сложного кода. Я говорю из мучительного опыта.

23

В веб-приложении каждая задача выполняется в форме запроса и ответа.

Программирование на стороне клиента осуществляется с помощью HTML-кода с использованием скрипта Java и его структур, библиотеки выполняются в Internet Explorer, Mozilla, браузерах Chrome.
В сценарии Java
серверные программные сервлеты выполняются в серверах Tomcat, web-logic, j boss, WebSphere

2

Я постараюсь объяснить это простым способом.

Клиентская сторона — это то, что пользователь видит / код, который виден в браузере.

Программирование на стороне клиента включает в себя HTML (HTML, HTML5, DHTML), CSS (CSS, CSS3) и JavaScript (JavaScript, ES5, ES6, ES7, TypeScript, JQuery, ReactJs, AngularJs, BackboneJs или любую другую интерфейсную среду JavaScript).

Программирование на стороне клиента фокусируется на том, «как будет выглядеть страница» и ее поведении в браузерах.

  1. HTML это то, что мы видим.
  2. CSS принимает решение о его проектировании (цвета, плавающие изображения, отступы и т. Д.).
  3. JavaScript монитор информации о странице. Все вызовы API и поддержка данных через DOM выполняется с помощью JavaScript.

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

Программирование на стороне сервера включает в себя язык программирования (Java, PHP, .Net, C #, C, C ++, NodeJS и т. Д.), Базу данных (SQL, Oracle, MySql, PostgreySql, No-Sql, MongoDB и т. Д.), Сторонний API (Rest, Soap ), Бизнес Логика.

Программирование на стороне сервера сосредоточено на том, «как сделать данные доступными для стороны клиента».

  1. Серверный язык отвечает за обмен данными между различными источниками данных, такими как база данных, сторонний API, файловая система, блокчейн и т. Д. Эти языки поддерживают определенный API для взаимодействия со стороны клиента.
  2. База данных отвечает за хранение информации.
  3. Бизнес-логика определяет «как использовать данные и что делать с данными».

Клиентская сторона запрашивает данные или запрашивает хранение данных со стороны сервера через API, предоставляемый серверной стороной. Этот запрос и ответ данных выполняется с использованием протокола HTTP / FTP, такого как REST API, SOAP API.

-1
По вопросам рекламы [email protected]