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

IT技术 javascript php client-side server-side
2021-01-02 21:15:12

我有这个代码:

<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。当一个在客户端上运行而另一个在服务器上运行时,问题和解决方案的本质对于任何一对语言都是相同的(即使它们是相同的语言)。当您看到有关特定语言的答案时,请考虑到这一点。

4个回答

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

                    |
               ---------->
              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呼叫并没有导致任何东西,它只是写了“+富+”到文件中。<?php echo 42; ?>呼叫导致的输出“42”,这是现在在该代码用来为光斑。

生成的 HTML/JavaScript 代码现在被发送到客户端,在那里进行评估。alert呼叫工作,而foo变量没有任何地方使用。

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

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

  1. 一个链接,它使浏览器加载一个新页面。
  2. 表单提交,将数据提交到服务器并加载新页面。
  3. 一个AJAX请求,这是一个JavaScript技术,使一个普通的HTTP请求到服务器(如1和2会),而无需离开当前页面。

这是一个更详细地概述这些方法的问题

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

可能值得将 WebSockets 添加到通信方法列表中。
2021-02-07 21:15:12
如果让我们说下拉值通过 jquery 更新怎么办。当用户执行第 2 步时。通过“提交”按钮将数据提交到服务器并加载新页面的表单提交是否能够将 jquery 更新的值传递给 php 中的控制器?或者它们对 php 不可见,因为它是通过 jquery 添加到 dom 的?@deceze
2021-02-13 21:15:12
您还可以window.open使用 iframe打开第二页或加载页面。
2021-02-20 21:15:12
@Fabricio 将从<form>数据创建一个 HTTP 请求并将其发送到服务器。您可以使用 Javascript 操作表单,让它们包含不同的数据。是的,如果该数据在提交时正确地成为表单的一部分,则该数据将成为结果 HTTP 请求的一部分;它是在原始 HTML 中还是在之后通过 Javascript 添加都没有关系。
2021-03-04 21:15:12

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

服务器端语言(PHP 等):它们从数据库中检索记录,通过无状态HTTP连接维护状态,并做很多需要安全性的事情。它们驻留在服务器上,这些程序永远不会将源代码暴露给用户。

图片来自 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请求到来之前,服务器上不会发生任何事情。*

图示

图片来源

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

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

好读:

  1. 维基百科:服务器端脚本
  2. 维基百科:客户端脚本
  3. Madara Uchiha:客户端和服务器端编程之间的区别

您的 Javascript 将在客户端上执行,而不是在服务器上。这意味着它foo不在服务器端评估,因此它的值不能写入服务器上的文件。

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

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

您在这里的回答值得注意,因为它提到了/a interpeter。但是,javascript 可以在服务器环境中编译和运行,并且它也可以被服务器交互。
2021-03-07 21:15:12

在 Web 应用程序中,每个任务都以请求和响应的方式执行。

客户端编程是使用带有 Java 脚本及其框架的 html 代码,库在 Internet Explorer、Mozilla、chrome 浏览器中执行。java场景中服务端编程servlets在Tomcat、web-logic、j boss、WebSphere server中执行