回答

收藏

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

技术问答 技术问答 535 人阅读 | 0 人回复 | 2023-09-12

我有这个代码:
% Y  K& m% J/ K& b. Z! I  U
    $ Y- k% V; c  O, d/ p
  • [/code]为什么这不会为什么bar写在我的文本文件里,却提醒42?  f1 n" m6 R( @  A5 d
  • 注:这个问题的早期修订版明确涉及到服务器上的 PHP 和客户端上的 JavaScript。当一种语言在客户端上运行,而另一种语言在服务器上运行时(即使它们是相同的语言),问题和解决方案的本质是任何一对语言是一样的。当你看到特定语言的答案时,请考虑这一点。7 f+ |' F+ G' X
  •                                                                
    ( `6 {( n9 w( A
  •     解决方案:                                                               1 I. ~. U2 z- W; X
  •                                                                 您的代码分为两个完全独立的部分,服务器端和客户端。
    . v; X3 j% |8 A& n$ Z5 n
    1.                     |               ---------->              HTTP request                    | --------------     |     -------------- |              |    |    |              ||    browser   |    |    |  web  server || (JavaScript) |    |    |  (PHP etc.)  ||              |    |    |              | --------------     |     --------------                     |  client side       |      server side                    |               双方通过 HTTP 通信请求和响应。PHP 在服务器上执行并输出一些 HTML 和 JavaScript 代码作为响应发送到客户端,并在客户端解释 HTML 并执行 JavaScript。一旦 PHP 输出响应完成后,脚本结束,直到新的 HTTP 请求进来。
    2. [*]示例代码执行如下:[code]
    3. [/list]第 1 步,PHP 执行标签之间的所有代码。结果如下:
    4. [list=1]
    5. [*]
    复制代码
    该file_put_contents呼叫没有导致任何东西,它只是在文件中写了 富 。由呼叫引起的输出42现在被用作光斑代码。
    1 X- B( m9 ^3 ?2 o; v% m  ~8 f
  • 这种生成 HTML/JavaScript 代码现在被发送到客户端,在那里它被评估。该alert还有foo变量无处使用。
    & m) t2 h7 P9 b" w4 g& ~. O  b  p
  • 甚至开始在客户端执行任何 JavaScript 之前,所有 PHP 代码将在服务器上执行。响应中没有留下 JavaScript 能与之互动的 PHP 代码。. _5 K: B) {- E8 Z7 o! W
  • 调用一些 PHP 代码,客户端必须向服务器发送新的 HTTP 请求。使用以下三种可能的方法之一:
    1 n0 V5 y  d9 o' I1 F& F
  • [ol]
    ; U. }  h9 \/ u  ]
  • 使浏览器加载新页面的链接。$ `2 x3 O; t5 a' [- v
  • 提交表格,向服务器提交数据,并加载新页面。
    - i: a: ^0 Z9 R7 n2 H/ `9 f6 K
  • 一个AJAX请求,这是一个JavaScript技术,使一个普通的HTTP在不离开当前页面的情况下,请求服务器(如1和2)。[/ol]这些方法的概述更详细:
    & M* g; f) G5 T& Q, I/ n1 \' U3 x
  • 也可以用 JavaScript 使用浏览器window.location或者提交表格打开新页面,模拟可能性 1. 和 2。# o# l" q: a6 m. s, n+ [% ]1 K) p
  • 问题说明首先,让我们了解服务器提供页面时的事件流:
    * X( b6 o: q# d! M. `& p
  • 4 n/ |0 G  }+ W3 K! T
  • 首先运行 PHP,它为客户端生成 HTML。7 v9 |7 A& C) A: B, j- G
  • 然后,HTML 在 PHP 完成后,我想强调的是,一旦代码离开服务器 - PHP 已完成,无法再访问。
    $ G5 i' O6 `7 S. k7 y
  • 然后,带 JavaScript 的 HTML 到达客户端时,客户端可以在HTML 上执行 JavaScript。所以真的,这里要记住的核心是HTTP 无状态。一旦要求离开服务器,服务器就不能再联系它了。因此,我们的选择是:6 M, B( I, D3 b7 a9 z! @4 i
  • [ol], a5 G- d4 O. V( ]  }) x# d4 e* Q! I
  • 完成初始请求后从客户端发送更多请求。
    0 S3 w' n6 l: E$ ]  v# N
  • 编码服务器在初始请求中提到的内容。[/ol]解决方案这是你应该问自己的核心问题:
    # k5 M. \) O, z* Q7 E, ]  ]' a/ g% K
  • 我是在写网站还是应用程序?网站主要是基于页面,页面加载时间需要尽可能快(如 - 维基百科)。Web 更多的应用程序是 AJAX,并执行大量往返以获取客户端快速信息(如 - 股票仪表板)。# I& u, G5 ]& H, V
  • 网站初始请求完成后,从客户端发送更多请求慢,因为它需要更多的显著费用 HTTP 请求。此外,它还需要异步性,因为发出 AJAX 请求需要一个处理程序来处理何时完成。5 |- W; {! e6 ]! Z" F% D" E3 `5 z& V/ L) I
  • 除非你的网站是从服务器中获取信息的应用程序,否则我不建议再次发出请求。( M6 ?: o- T8 [
  • 您需要快速响应时间,这将产生转换和加载时间巨大影响。在这种情况下,发出 Ajax 请求的初始正常运行时间非常慢,不必要。/ E  B( D; Q% n1 `. j/ G( T
  • 你有两种方法来解决这个问题+ U+ `2 Y2 w: u5 b
  • . K* b/ E2 b" ^. l- b
  • 设置 cookie    - cookie  可以读取服务器和客户端HTTP 请求中发送的标头。8 p; I0 D9 {6 ~$ E) d1 n; B& r
  • 将变量编码为 JSON    - JSON 看上去很接近 JavaScript 对象,还有大多数JSON 对象有效 JavaScript 变量。设置 cookie真的不它赋值,真的不难:
    1. setcookie("MyCookie",$value); // Sets the cookie to the value,remember,do not                         Set it with HTTP only to true.
    2. [/list]然后,你可以用它JavaScript阅读使用document.cookie:
    3. 这是一个简短的手动分析器,但我对上面链接的答案有更好的测试:
    4. [list=1]var cookies = document.cookie.split(";").    map(function(el){ return el.split("="); }).    reduce(function(prev,cur){ prev[cur[0]] = cur[1]; return prev ,{};alert(cookies["MyCookie"]); // Value set with PHP.
    5. [/list]Cookies 适用于少量数据。这是跟踪服务经常做的事情。
    6. 一旦我们有了更多的数据,我们以在 JavaScript 用于变量JSON 编码:
    7. [list=1]
    8. [*]
    复制代码
    假设$value是json_encode能够在PHP端(通常是这样)。这种技术是 Stack Overflow 聊天所做的事情(只.NET 而不是 PHP)。0 @6 O- E8 m: H% u. G3 |" [
  • 应用如果你正在编写应用程序 - 突然,初始加载时间并不总是和应用程序的连续性一样重要,值得单独加载数据和代码。/ s% r7 D8 @, O- s/ k! F
  • 我在这里的回答解释了如何在 JavaScript 中使用 AJAX 加载数据:[code]function callback(data){    // What do I do with the response?}var httpRequest = new XMLHttpRequest;httpRequest.onreadystatechange = function(){     if (httpRequest.readyState === 4) { / Request is done        if (httpRequest.status === 200successfully            callback(httpRequest.responseText); // We're calling our method          }httpRequest.open('GET',"/echo/json");httpRequest.send();
    : H$ o( i2 L- W" ^5 ~7 Y, g
或者使用 jQuery:  S; W1 ^# M. {
    $.get("/your/url").done(function(data){    / What do I do with the data?});6 g5 V( Z. q+ m4 _  C
现在服务器只需要包含一个/your/url路在您的情况下,由/文件包含获取数据并处理数据的代码:
5 {2 h4 S4 x* B& `4 h$ f
    getValue(); // Makes an API and database callheader("Content-Type: application/json"); // Advise client of response typeecho json_encode($val); // Write it to the output" s7 |) \5 H/ ?  ^! G! |
这样,我们的 JavaScript 文件需要数据并显示它,而不是代码或布局。它更干净,并开始随着应用程序的增加而获得回报。它也是一个更好的关注点分离,允许在不涉及任何服务器端技术的情况下测试客户端代码,这是另一个优势。
分享到:
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则