提问者:小点点

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


我有这个代码:

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


共3个答案

匿名用户

您的代码被分成两个完全独立的部分,服务器端和客户端。

                    |
               ---------->
              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执行标记之间的所有代码。 结果是这样的:

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

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

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

现在将生成的HTML/JavaScript代码发送到客户机,在客户机中对其进行评估。 alert调用可以工作,而foo变量不在任何地方使用。

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

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

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

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

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

匿名用户

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

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

因此,您可以很容易地看到服务器端语言处理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. Wikipedia:服务器端脚本
  2. Wikipedia:客户端脚本
  3. Madara Uchiha:客户端和服务器端编程的区别

匿名用户

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

考虑这个过程的最好方法是,就像您正在动态地生成一个文本文件一样。 您生成的文本只有在浏览器对其进行解释后才成为可执行代码。 服务器上只计算您放置在标记之间的内容。

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