客户端有什么区别

我有这样的代码:

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


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

                    |
               ---------->
              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; ?> <?php echo 42; ?>调用导致输出“42”,该输出现在位于代码过去的位置。

由此产生的HTML / JavaScript代码现在被发送到客户端,在那里进行评估。 alert调用起作用,而foo变量不在任何地方使用。

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

为了调用一些PHP代码,客户端将不得不向服务器发送一个新的HTTP请求。 这可以通过三种可能的方法之一来实现:

  • 导致浏览器加载新页面的链接。
  • 表单提交,将数据提交给服务器并加载新页面。
  • 一种AJAX请求,它是一种向服务器发出常规HTTP请求的Javascript技术(如1.和2.),但不会离开当前页面。
  • 下面是一个更详细地概述这些方法的问题

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


    要确定为什么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调用。

  • 您可以通过重新加载页面并发送HTTP请求来完成
  • 您可以使用JavaScript进行AJAX调用,并且不需要重新加载页面
  • 好阅读:

  • 维基百科:服务器端脚本
  • 维基百科:客户端脚本
  • Madara Uchiha:客户端和服务器端编程的区别

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

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

    顺便说一下,习惯于在HTML或Javascript中嵌入随机的PHP逻辑片段可能会导致严重错综复杂的代码。 我从痛苦的经历中发言。

    链接地址: http://www.djcxy.com/p/47815.html

    上一篇: What is the difference between client

    下一篇: Dispaly Blob image from database using Symfony Twig