欧美一区二区三区,国内熟女精品熟女A片视频小说,日本av网,小鲜肉男男GAY做受XXX网站

客戶端和服務器端編程有什么區別?

江奕云1年前7瀏覽0評論

我有這個代碼:

<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執行& lt?php?& gt標簽。結果是這樣的:

<script type="text/javascript">
    var foo = 'bar';

    var baz = 42;
    alert(baz);
</script>

file_put_contents調用沒有產生任何結果,它只是將“+ foo +”寫入一個文件。& lt?php echo 42?& gt調用產生了輸出“42”,它現在位于該代碼原來所在的位置。

產生的HTML/JavaScript代碼現在被發送到客戶端,在那里進行評估。alert調用有效,而foo變量在任何地方都沒有使用。

在客戶機開始執行任何JavaScript之前,所有PHP代碼都在服務器上執行。響應中沒有留下JavaScript可以與之交互的PHP代碼。

為了調用一些PHP代碼,客戶機必須向服務器發送一個新的HTTP請求。這可以通過以下三種方法之一實現:

鏈接,使瀏覽器加載新頁面。 表單提交,向服務器提交數據并加載新頁面。 AJAX請求,這是一種向服務器發出常規HTTP請求的Javascript技術(如1。第二。將),但不離開當前頁面。 這里有一個問題更詳細地概述了這些方法

您還可以使用JavaScript讓瀏覽器使用window.location打開一個新頁面,或者提交一個表單,模擬可能性1。第二。

# # #要確定為什么PHP代碼在JavaScript代碼中不起作用,我們需要了解什么是客戶端和服務器端語言,以及它們是如何工作的。

服務器端語言(PHP等。):它們從數據庫中檢索記錄,通過無狀態HTTP連接維護狀態,并做許多需要安全性的事情。它們駐留在服務器上,這些程序的源代碼永遠不會暴露給用戶。

Image from wikipedia_http://en.wikipedia.org/wiki/File:Scheme_dynamic_page_en.svg圖像屬性

因此,您可以很容易地看到,服務器端語言處理HTTP請求并處理它們,正如@deceze所說,PHP在服務器上執行并輸出一些HTML,可能還有JavaScript代碼,這些代碼作為響應發送給客戶端,在客戶端解釋HTML并執行JavaScript。

另一方面,客戶端語言(如JavaScript)駐留在瀏覽器中并在瀏覽器中運行。客戶端腳本通常是指由用戶的web瀏覽器在客戶端而不是服務器端執行的web上的一類計算機程序。

JavaScript對用戶來說是可見的,可以很容易地修改,所以在安全方面,我們不能依賴JavaScript。

所以當你在server上發出HTTP請求時,服務器首先會仔細讀取PHP文件,看看有沒有需要執行的任務,然后向客戶端發送響應。同樣,正如@deceze所說,*一旦PHP輸出完響應,腳本就會結束,在新的HTTP請求到來之前,服務器上不會發生任何事情。*

Graphical representation

圖像源

那么現在如果需要調用PHP該怎么辦呢?這取決于您需要如何做:要么重新加載頁面,要么使用AJAX調用。

您可以通過重新加載頁面并發送HTTP請求來實現這一點 您可以用JavaScript進行AJAX調用——這不需要重新加載頁面 好讀物:

維基百科:服務器端腳本 維基百科:客戶端腳本 斑·宇智波:客戶端和服務器端編程的區別 # # #您的Javascript將在客戶端執行,而不是在服務器上。這意味著foo不是在服務器端計算的,因此它的值不能寫入服務器上的文件。

思考這個過程的最佳方式是,假設您正在動態生成一個文本文件。你生成的文本只有在瀏覽器解釋后才成為可執行代碼。只有您放置在& lt?php標簽是在服務器上計算的。

順便說一下,養成在HTML或Javascript中嵌入隨機的PHP邏輯片段的習慣會導致非常復雜的代碼。我從痛苦的經歷中說出這番話。