回答

收藏

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

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

我有这个代码:
0 Q4 R6 q- W" _& g& v
    1 {! h( N& t+ ]4 a4 ^9 S* g( H
  • [/code]为什么这不会为什么bar写在我的文本文件里,却提醒42?
    : i( O6 q$ U9 }) ^. a& q* y) @
  • 注:这个问题的早期修订版明确涉及到服务器上的 PHP 和客户端上的 JavaScript。当一种语言在客户端上运行,而另一种语言在服务器上运行时(即使它们是相同的语言),问题和解决方案的本质是任何一对语言是一样的。当你看到特定语言的答案时,请考虑这一点。
    ; O! t9 [! d/ C' z4 O
  •                                                                
      L/ C) L# ]  d& `9 ]. q6 t
  •     解决方案:                                                               5 t. b9 T$ f, B3 b) y" _
  •                                                                 您的代码分为两个完全独立的部分,服务器端和客户端。
    6 l8 m: M4 Q: l0 m: T) y! @
    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现在被用作光斑代码。
    $ b6 d" K5 w7 p
  • 这种生成 HTML/JavaScript 代码现在被发送到客户端,在那里它被评估。该alert还有foo变量无处使用。
      G9 s% p. ?, D. G. f: ~
  • 甚至开始在客户端执行任何 JavaScript 之前,所有 PHP 代码将在服务器上执行。响应中没有留下 JavaScript 能与之互动的 PHP 代码。
    " B, \  [' r6 Y! l5 V
  • 调用一些 PHP 代码,客户端必须向服务器发送新的 HTTP 请求。使用以下三种可能的方法之一:  X: A  A: Q8 _) P; [
  • [ol], i5 K+ }! ]2 |/ @
  • 使浏览器加载新页面的链接。; w3 I7 Z; Q. Q2 H
  • 提交表格,向服务器提交数据,并加载新页面。4 ?- B; p' h; Y3 j  m
  • 一个AJAX请求,这是一个JavaScript技术,使一个普通的HTTP在不离开当前页面的情况下,请求服务器(如1和2)。[/ol]这些方法的概述更详细:
    3 `! U+ h6 z- b- M1 E! C) L
  • 也可以用 JavaScript 使用浏览器window.location或者提交表格打开新页面,模拟可能性 1. 和 2。
    5 [* B0 q: g  q3 e; k% f: {; q
  • 问题说明首先,让我们了解服务器提供页面时的事件流:* D0 L' R, v; H, V
  • : s' D/ @, G5 ~; E
  • 首先运行 PHP,它为客户端生成 HTML。
    3 {) V, Y$ v5 S$ K( B  I
  • 然后,HTML 在 PHP 完成后,我想强调的是,一旦代码离开服务器 - PHP 已完成,无法再访问。
    ( z+ M0 ^; Y" r
  • 然后,带 JavaScript 的 HTML 到达客户端时,客户端可以在HTML 上执行 JavaScript。所以真的,这里要记住的核心是HTTP 无状态。一旦要求离开服务器,服务器就不能再联系它了。因此,我们的选择是:
    9 T# D* W$ `, l% b! [' ]* P
  • [ol]
    - R: ~, X. l4 ]
  • 完成初始请求后从客户端发送更多请求。$ {# v" L2 r8 C7 o3 J: R
  • 编码服务器在初始请求中提到的内容。[/ol]解决方案这是你应该问自己的核心问题:
    3 E) T9 u9 u& J0 f
  • 我是在写网站还是应用程序?网站主要是基于页面,页面加载时间需要尽可能快(如 - 维基百科)。Web 更多的应用程序是 AJAX,并执行大量往返以获取客户端快速信息(如 - 股票仪表板)。
    - c2 V/ y; k. `& f- N; p
  • 网站初始请求完成后,从客户端发送更多请求慢,因为它需要更多的显著费用 HTTP 请求。此外,它还需要异步性,因为发出 AJAX 请求需要一个处理程序来处理何时完成。
    ) O1 z) G1 B: @. X$ g4 H
  • 除非你的网站是从服务器中获取信息的应用程序,否则我不建议再次发出请求。9 W# w9 O3 K% r# ]& ~! @5 o
  • 您需要快速响应时间,这将产生转换和加载时间巨大影响。在这种情况下,发出 Ajax 请求的初始正常运行时间非常慢,不必要。* }+ p/ i1 T2 C* O9 p# @, M- u
  • 你有两种方法来解决这个问题
    1 e6 ~6 O1 o3 V8 j

  • : z& k  m! C, m0 e* ]& R, {
  • 设置 cookie    - cookie  可以读取服务器和客户端HTTP 请求中发送的标头。
    0 ?$ P( L1 d+ ^
  • 将变量编码为 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)。
    8 C% k5 x' ]3 s' ^, m
  • 应用如果你正在编写应用程序 - 突然,初始加载时间并不总是和应用程序的连续性一样重要,值得单独加载数据和代码。) f6 H; y9 ^1 m
  • 我在这里的回答解释了如何在 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();& ~+ |7 {9 s# X7 {3 n8 \9 U2 k
或者使用 jQuery:; _/ f: d9 u0 f% s; j/ a0 z
    $.get("/your/url").done(function(data){    / What do I do with the data?});
    % j0 I8 E3 _0 F8 v1 z
现在服务器只需要包含一个/your/url路在您的情况下,由/文件包含获取数据并处理数据的代码:0 y8 Y; n  H' G0 Q7 F! ~. S
    getValue(); // Makes an API and database callheader("Content-Type: application/json"); // Advise client of response typeecho json_encode($val); // Write it to the output
    $ i% i. G# }+ v5 S
这样,我们的 JavaScript 文件需要数据并显示它,而不是代码或布局。它更干净,并开始随着应用程序的增加而获得回报。它也是一个更好的关注点分离,允许在不涉及任何服务器端技术的情况下测试客户端代码,这是另一个优势。
分享到:
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则