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

dec*_*eze 471 javascript php server-side client-side

我有这个代码:

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

    var baz = <?php echo 42; ?>;
    alert(baz);
</script>
Run Code Online (Sandbox Code Playgroud)

为什么这不会在我的文本文件中写入"bar",但警告"42"?


注意:此问题的早期修订明确是关于服务器上的PHP和客户端上的JavaScript.问题和解决方案的本质是相同的任何对当一个客户端上运行的语言和其他服务器上.当你看到有关特定语言的答案时,请考虑到这一点.

dec*_*eze 444

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

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

双方通过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>
Run Code Online (Sandbox Code Playgroud)

第1步,PHP执行<?php ?>标记之间的所有代码.结果是这样的:

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

    var baz = 42;
    alert(baz);
</script>
Run Code Online (Sandbox Code Playgroud)

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.

  • 您还可以使用“window.open”打开第二页或使用 iframe 加载页面。 (2认同)

Nul*_*teя 158

要确定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)驻留在浏览器上并在浏览器上运行,而客户端脚本通常是指Web上的计算机程序类,由用户的Web浏览器在客户端执行,而不是的服务器端.

JavaScript对用户可见,并且可以轻松修改,因此对于安全性问题,我们不能依赖JavaScript.

因此,当您在服务器上发出HTTP请求时服务器首先仔细读取PHP文件以查看是否有任何需要执行的任务并将响应发送到客户端并再次发送@deceze说*一旦PHP完成输出响应,脚本结束,在新的HTTP请求进入之前,服务器上什么都不会发生.*

图示

图像来源

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

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

好读:

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


Nit*_*Art 27

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

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

顺便说一句,养成在HTML或Javascript中嵌入随机PHP逻辑片段的习惯会导致严重错综复杂的代码.我说的是痛苦的经历.

  • 你的答案值得注意,因为它提到了/ a interpeter.但是,javascript可以在服务器环境中编译和运行,也可以由服务器进行处理. (3认同)