這兩段代碼做了根本不同的事情,即使在某些情況下,用戶觀察到的行爲可能非常相似。
這是一個服務器啓動重定向:
<?php
header('Location: example.php?parameter');
?>
基本上這是告訴它應該瀏覽到其他位置瀏覽器的服務器的方式。 (瀏覽器可以忽略它,但實際上沒有理由忽略它。)可以在響應中添加其他詳細信息,告訴瀏覽器此重定向是臨時還是永久的,或者有其他相關條件。但最簡單的是,服務器只是說「我在這裏沒有任何東西給你,請在那裏爲你提供信息。」
這是客戶端發起的表單POST:
<form action="example.php" method="post">
嘛,「客戶端發起的」以張貼形式的實際行動來自於瀏覽器。服務器可能會將該HTML標籤提供給客戶端,告訴它這樣做,但客戶端可以根據需要隨意更改它。 (儘管如此,沒有理由這麼做。)這裏的要點是,這是客戶端發送數據到example.php
的一種方式。它與重定向無關,只是將數據發送到服務器上的特定資源。
服務器可以使用重定向,渲染頁面或任何其他響應來響應該數據。
這些可能以多種方式聯合使用。假設您有page1.php
和page2.php
。在page1
有一個表格,然後提交表格,你希望用戶看到page2
。這是用戶觀察結果可能無法區分的地方。
page1
可以發帖到page2
和page2
可以處理提交的數據然後顯示。 或page1
可以回發到page1
,處理提交的數據,並重定向到page2
。對於最終用戶來說,基本上沒有區別。主要區別在於如何組織代碼。在這方面,當然,個人喜好會起作用。但是,這不是其中任何一種工具被採用的唯一情況。例如,出於完全不同的原因,您可能希望將值提交給完全不同的頁面,或者在頁面請求上重定向某些服務器端原因,而客戶端完全不瞭解這些原因。
隨着您開發更復雜的Web應用程序,您會發現某些模式在某些情況下運行良好,個人偏好將開始符合這些模式。最後,這些只是執行操作的工具(將客戶端重定向到其他位置,將數據發送到服務器),而您的總體模式和實踐只是簡單地使用這些工具。
是的,我知道,這不是我問的原因。我寧願用php而不用html來做這件事,但是對於我正在使用的這種方法有什麼缺點。我可以理解,當您在使用此方法時需要使用重定向時,除此之外,這是不可能的。還有其他原因嗎? –