客户端编程和服务器端编程有什么区别?

What is the difference between client-side and server-side programming?

提问人:deceze 提问时间:12/12/2012 最后编辑:Quentindeceze 更新时间:6/13/2022 访问量:56677

问:

我有这个代码:

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

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

为什么这没有将“bar”写入我的文本文件,而是警告“42”?


注意:这个问题的早期修订明确地涉及服务器上的 PHP 和客户端上的 JavaScript。当一种语言在客户端上运行,另一种语言在服务器上运行时,问题和解决方案的本质是相同的(即使它们是同一种语言)。当您看到有关特定语言的答案时,请考虑到这一点。

JavaScript PHP 客户端 服务器端

评论


答:

530赞 deceze 12/12/2012 #1

您的代码被拆分为两个完全独立的部分,即服务器端客户端

                    |
               ---------->
              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>

调用没有产生任何结果,它只是将“ + foo +”写入文件。该调用导致输出“42”,该输出现在位于该代码以前所在的位置。file_put_contents<?php echo 42; ?>

生成的 HTML/JavaScript 代码现在被发送到客户端,并在其中进行评估。调用有效,而变量未在任何地方使用。alertfoo

所有 PHP 代码都是在客户端开始执行任何 JavaScript 之前在服务器上执行的。响应中没有留下 JavaScript 可以与之交互的 PHP 代码。

要调用某些PHP代码,客户端必须向服务器发送新的HTTP请求。这可以使用以下三种可能的方法之一发生:

  1. 一个链接,它会导致浏览器加载一个新页面。
  2. 表单提交,用于将数据提交到服务器并加载新页面。
  3. AJAX 请求,这是一种 Javascript 技术,用于向服务器发出常规的 HTTP 请求(如 1. 和 2. will),但不离开当前页面。

这里有一个问题更详细地概述了这些方法

您还可以使用 JavaScript 使浏览器使用或提交表单打开新页面,模拟可能性 1.和 2.window.location

评论

2赞 jcubic 4/25/2016
您还可以使用 iframe 打开第二页或使用 iframe 加载页面。window.open
1赞 Quentin 12/19/2016
可能值得将 WebSockets 添加到通信方法列表中。
0赞 FabricioG 10/3/2018
假设下拉值通过jquery更新怎么办。当用户执行步骤 2.表单提交,通过“提交”按钮将数据提交到服务器并加载新页面,jquery更新的值是否能够传递给php中的控制器?或者它们对 php 不可见,因为它是通过 jquery 添加到 dom 中的?@deceze
0赞 deceze 10/3/2018
@Fabricio 将根据数据创建 HTTP 请求并发送到服务器。您可以使用 Javascript 操作表单,使它们包含不同的数据。是的,如果该数据在提交时正确地属于表单,则该数据将成为生成的 HTTP 请求的一部分;无论是在原始 HTML 中还是之后通过 Javascript 添加都无关紧要。<form>
0赞 Greenonline 12/9/2022
你说,那么大概,那个文件现在驻留在服务器文件系统的某个地方?这有点不清楚,因为您的答案中没有明确说明。it just wrote " + foo + " into a file
38赞 NitayArt 12/12/2012 #2

您的 Javascript 将在客户端上执行,而不是在服务器上执行。这意味着不会在服务器端计算,因此无法将其值写入服务器上的文件。foo

考虑此过程的最佳方式是,就好像您正在动态生成文本文件一样。您生成的文本只有在浏览器解释后才会成为可执行代码。只有您在标记之间放置的内容才会在服务器上进行评估。<?php

顺便说一句,养成在 HTML 或 Javascript 中嵌入 PHP 逻辑的随机片段的习惯可能会导致代码非常复杂。我从痛苦的经历中说话。

评论

4赞 Brett Caswell 3/11/2015
你在这里的回答是值得注意的,因为它提到了/a interpeter。但是,javascript 可以在服务器环境中编译和运行,也可以由服务器进行干预。
189赞 NullPoiиteя 7/1/2013 #3

为了确定为什么PHP代码不能在JavaScript代码中工作,我们需要了解什么是客户端服务器端语言,以及它们是如何工作的。

服务器端语言(PHP 等):它们从数据库中检索记录,通过无状态 HTTP 连接维护状态,并执行许多需要安全性的操作。它们驻留在服务器上,这些程序永远不会向用户公开其源代码。

Image from wikipedia_http://en.wikipedia.org/wiki/File:Scheme_dynamic_page_en.svg 图片属性

因此,你可以很容易地看到服务器端语言处理HTTP请求并处理它们,正如@deceze所说,PHP在服务器上执行并输出一些HTML,也许还有JavaScript代码,这些代码作为响应发送到客户端,在那里解释HTML并执行JavaScript。

另一方面,客户端语言(如 JavaScript)驻留在浏览器中并在浏览器中运行。客户端脚本通常是指 Web 上由用户的 Web 浏览器(而不是服务器端)在客户端执行的一类计算机程序。

JavaScript 对用户是可见的,并且可以轻松修改,因此对于安全方面,我们不能依赖 JavaScript。

因此,当您在服务器上发出 HTTP 请求时,服务器首先会仔细读取 PHP 文件,看看是否有任何需要执行的任务,然后向客户端发送响应。同样,正如@deceze所说,*一旦PHP完成响应的输出,脚本就会结束,在新的HTTP请求传入之前,服务器上不会发生任何事情。

Graphical representation

图片来源

那么现在如果我需要调用 PHP,我该怎么办?这取决于您需要如何执行此操作:通过重新加载页面或使用 AJAX 调用。

  1. 您可以通过重新加载页面并发送 HTTP 请求来执行此操作
  2. 您可以使用 JavaScript 进行 AJAX 调用 - 这不需要重新加载页面

好读:

  1. 维基百科 : 服务器端脚本
  2. 维基百科 : 客户端脚本
  3. 宇智波斑:客户端和服务器端编程的区别