回答

收藏

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

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

我有这个代码:1 k( H4 H) A# a6 [+ w
    8 p: v" H' w" Q2 J7 ]
  • [/code]为什么这不会为什么bar写在我的文本文件里,却提醒42?& j3 i( s- U+ j, r% d, D8 A# ~5 N
  • 注:这个问题的早期修订版明确涉及到服务器上的 PHP 和客户端上的 JavaScript。当一种语言在客户端上运行,而另一种语言在服务器上运行时(即使它们是相同的语言),问题和解决方案的本质是任何一对语言是一样的。当你看到特定语言的答案时,请考虑这一点。
      e) w/ S7 }6 F, R
  •                                                                ; D, B. x1 g# g  |  ?
  •     解决方案:                                                               
    & D' V6 J6 n' U7 p
  •                                                                 您的代码分为两个完全独立的部分,服务器端和客户端。3 {& n7 d2 k. r$ q* r' k
    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现在被用作光斑代码。; K7 [" Y8 D: j. Q* E/ U' j8 X; \
  • 这种生成 HTML/JavaScript 代码现在被发送到客户端,在那里它被评估。该alert还有foo变量无处使用。
      ^8 J2 {- |3 c
  • 甚至开始在客户端执行任何 JavaScript 之前,所有 PHP 代码将在服务器上执行。响应中没有留下 JavaScript 能与之互动的 PHP 代码。
    % l2 Z( g% N% z% ?  w! x" ]
  • 调用一些 PHP 代码,客户端必须向服务器发送新的 HTTP 请求。使用以下三种可能的方法之一:& A: E( ]% B6 C! U
  • [ol]( }. q8 B+ t# r7 w+ X* a  ?
  • 使浏览器加载新页面的链接。
    # S3 l' D9 G5 r) q* X5 s
  • 提交表格,向服务器提交数据,并加载新页面。. r) X; f( o$ z* b, _
  • 一个AJAX请求,这是一个JavaScript技术,使一个普通的HTTP在不离开当前页面的情况下,请求服务器(如1和2)。[/ol]这些方法的概述更详细:4 C5 ]3 ~1 J9 \' D7 C* C1 T
  • 也可以用 JavaScript 使用浏览器window.location或者提交表格打开新页面,模拟可能性 1. 和 2。/ q6 b; R  k3 c2 r& j
  • 问题说明首先,让我们了解服务器提供页面时的事件流:
    ) n9 ^6 ~$ F$ P3 J8 }5 |0 A# t
  • - j+ b: Y; L- W
  • 首先运行 PHP,它为客户端生成 HTML。
    / ~6 ]. I) z/ y, v- N3 p+ t
  • 然后,HTML 在 PHP 完成后,我想强调的是,一旦代码离开服务器 - PHP 已完成,无法再访问。
    " M0 K* Z3 U8 @$ B, A
  • 然后,带 JavaScript 的 HTML 到达客户端时,客户端可以在HTML 上执行 JavaScript。所以真的,这里要记住的核心是HTTP 无状态。一旦要求离开服务器,服务器就不能再联系它了。因此,我们的选择是:$ G: W+ D0 c0 K
  • [ol]
    ) m" I; W( z/ ]5 g
  • 完成初始请求后从客户端发送更多请求。
    8 o/ t4 _, e* x5 a/ B( G
  • 编码服务器在初始请求中提到的内容。[/ol]解决方案这是你应该问自己的核心问题:
      `3 E* J9 b+ s; {
  • 我是在写网站还是应用程序?网站主要是基于页面,页面加载时间需要尽可能快(如 - 维基百科)。Web 更多的应用程序是 AJAX,并执行大量往返以获取客户端快速信息(如 - 股票仪表板)。
    0 \, X5 k) a6 B6 N) i# X: a
  • 网站初始请求完成后,从客户端发送更多请求慢,因为它需要更多的显著费用 HTTP 请求。此外,它还需要异步性,因为发出 AJAX 请求需要一个处理程序来处理何时完成。
    1 T/ i7 }1 w8 S1 r5 c4 i
  • 除非你的网站是从服务器中获取信息的应用程序,否则我不建议再次发出请求。
    : V9 }7 V8 P/ s8 F" d
  • 您需要快速响应时间,这将产生转换和加载时间巨大影响。在这种情况下,发出 Ajax 请求的初始正常运行时间非常慢,不必要。! @8 I( ~$ v( k+ X" L
  • 你有两种方法来解决这个问题
    ! w; l& F( G  p% ?( F* G5 i

  • 4 M' {, [$ g" d4 b, J! h
  • 设置 cookie    - cookie  可以读取服务器和客户端HTTP 请求中发送的标头。0 E) W: x0 z- p* g
  • 将变量编码为 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)。
    ! O# x5 t# I2 Q& Y( N$ A
  • 应用如果你正在编写应用程序 - 突然,初始加载时间并不总是和应用程序的连续性一样重要,值得单独加载数据和代码。0 P( j7 H$ Q) K3 y* P, c
  • 我在这里的回答解释了如何在 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();: o  Y  H. e. \) _' _
或者使用 jQuery:2 q! q9 J1 H: Q& [- N- ]( M. R
    $.get("/your/url").done(function(data){    / What do I do with the data?});
    7 |* g0 _  w: H; K+ v
现在服务器只需要包含一个/your/url路在您的情况下,由/文件包含获取数据并处理数据的代码:% m. i- K+ v" f1 t9 i
    getValue(); // Makes an API and database callheader("Content-Type: application/json"); // Advise client of response typeecho json_encode($val); // Write it to the output
      g9 h& Z+ t+ k( E
这样,我们的 JavaScript 文件需要数据并显示它,而不是代码或布局。它更干净,并开始随着应用程序的增加而获得回报。它也是一个更好的关注点分离,允许在不涉及任何服务器端技术的情况下测试客户端代码,这是另一个优势。
分享到:
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则