为了账号安全,请及时绑定邮箱和手机立即绑定

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

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

郎朗坤 2019-05-20 15:41:44
我有这个代码:<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 回答

?
饮歌长啸

TA贡献1951条经验 获得超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执行<?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请求。这可以通过三种可能的方法之一发生:


一个链接,导致浏览器加载新页面。

表单提交,将数据提交到服务器并加载新页面。

一个AJAX请求,它是一种Javascript技术,可以向服务器发出常规HTTP请求(如1.和2.将),但不会离开当前页面。

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

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


查看完整回答
反对 回复 2019-05-20
?
素胚勾勒不出你

TA贡献1827条经验 获得超9个赞

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

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

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


查看完整回答
反对 回复 2019-05-20
  • 4 回答
  • 0 关注
  • 2268 浏览
慕课专栏
更多

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信