Чим відрізняється програмування на стороні клієнта та сервера?


498

У мене є цей код:

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

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

Чому це не записує "бар" у мій текстовий файл, а попереджає "42"?


Примітка: Раніші редакції цього питання явно стосувалися PHP на сервері та JavaScript на клієнті. Істотна природа проблеми та рішення однакові для будь-якої пари мов, коли одна працює на клієнті, а інша на сервері (навіть якщо вони однакові). Будь ласка, враховуйте це, коли ви бачите відповіді, які говорять про певні мови.

Відповіді:


460

Ваш код розділений на дві повністю окремі частини, сторону сервера та клієнт .

                    |
               ---------->
              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. У відповіді, з якою JavaScript міг би взаємодіяти, не залишився PHP-код.

Щоб зателефонувати на якийсь PHP-код, клієнту доведеться надіслати новий сервер HTTP на сервер. Це може статися за допомогою одного з трьох можливих методів:

  1. Посилання, через яке браузер завантажує нову сторінку.
  2. Подання форми, яка подає дані на сервер та завантажує нову сторінку.
  3. Запит AJAX , який є технікою Javascript для отримання звичайного HTTP-запиту на сервер (як 1. і 2. буде), але не залишаючи поточну сторінку.

Ось питання, що описує цей метод детальніше

Ви також можете використовувати JavaScript, щоб змусити браузер відкрити нову сторінку за допомогою window.locationабо надіслати форму, емулюючи можливості 1. і 2.


1
Ви також можете відкрити другу сторінку, використовуючи window.openабо завантажуючи сторінку, використовуючи iframe.
jcubic

Можливо, варто додати WebSockets до списку методів зв'язку.
Квентін

Що робити, якщо скажімо, що спадні значення оновлюються через jquery. Коли користувач робить крок 2. Подання форми, яка подає дані на сервер та завантажує нову сторінку, за допомогою кнопки «Надіслати», чи зможе оновлені значення jquery передати контролеру в php? Або вони не були б видимі для php, оскільки він був доданий до дому через jquery? @deceze
FabricioG

@Fabricio З даних буде створено запит HTTP <form>та надіслано серверу. Ви можете маніпулювати формами за допомогою Javascript, щоб вони містили різні дані. Так, ці дані будуть частиною отриманого HTTP-запиту, якщо вони належним чином формуляру під час подання; не має значення, був він у вихідному HTML чи доданий згодом через Javascript.
деле

163

Щоб визначити, чому PHP- код не працює в коді JavaScript, нам потрібно зрозуміти, що таке клієнтська та серверна мови та як вони працюють.

Мови на стороні сервера (PHP тощо) : вони отримують записи з баз даних, підтримують стан через HTTP- з'єднання без стану та роблять багато речей, які потребують безпеки. Вони перебувають на сервері, ці програми ніколи не піддають користувачеві свій вихідний код.

Зображення з wikipedia_http: //en.wikipedia.org/wiki/File: Scheme_dynamic_page_en.svg зображення attr

Таким чином, ви можете легко побачити, що мови сторонніх серверів обробляють 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. Мадара Учіха: Різниця між програмою на стороні клієнта та сервера

30

Ваш Javascript буде виконуватися на клієнті, а не на сервері. Це означає, що fooце не оцінюється на стороні сервера, і тому його значення не можна записати у файл на сервері.

Найкращий спосіб подумати над цим процесом, як якщо б ви динамічно генерували текстовий файл. Генерований вами текст стає виконуваним кодом лише після того, як браузер його інтерпретує. <?phpНа сервері оцінюється лише те, що ви розміщуєте між тегами.

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


3
Ваша відповідь тут примітна, оскільки вона вказує на / інтерпетера. Однак javascript можна компілювати та запускати у серверному середовищі, і він може перешкоджатись і сервером.
Бретт Касвелл

3

У веб-додатку кожне завдання виконується у спосіб запиту та відповіді.

Програмування на стороні клієнта - це html-код із сценарієм Java та його рамками, бібліотеки виконуються в Internet Explorer, Mozilla, chrome браузерах. У сервері сценарію Java сервлети програмування виконують сервери в Tomcat, web-логіка, j бос, сервери WebSphere

Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.