首頁 >後端開發 >php教程 >php為啥回傳一段js程式碼?

php為啥回傳一段js程式碼?

WBOY
WBOY原創
2016-12-05 13:44:18919瀏覽

不懂php為啥會回傳一段js字串?例如:echo '<script>window.location.href="/index.php/Admin/Login"</script>';

回覆內容:

不懂php為啥會回傳一段js字串?例如:echo '<script>window.location.href="/index.php/Admin/Login"</script>';

php中是不能執行js的,js只能在php解析成html後才能執行。如果想用php輸出js 就要把js程式碼當成php的字串來輸出。

這個應該是為了跳頁,沒什麼好奇怪,看具體需求和應用場景了。例如下面的程式碼

php為啥回傳一段js程式碼?

(php中)js的運作不是在伺服器上面的,應該是在客戶端。

php只是把 "<script></script>"這個字串回到前台,並不執行裡面的語句,假如你將該字串顯示在瀏覽器上,則瀏覽器會自動編譯執行該腳本。

你可以考慮使用file_get_contents($url);

通常在網頁請求中判斷,如果沒有登入跳轉

<code class="php">if(!$login){
// 和输出字符串没区别,只不过会被js执行
echo '<script>window.location.href="/index.php/Admin/Login"</script>';
}
</code>

題主的意思應該是想問,為啥沒跳轉吧?

不太清楚題主的意思,建議去看下提問的藝術...

php可以回傳任何程式碼,這個沒什麼討論的

以前帶過的一個實習生問過我為什麼PHP不能把異常拋給瀏覽器,現在的一個妹子同事有一次嘗試在php中取一個JS中的變量做判斷,還有題主的這個問題,基本上都是沒搞懂一個請求是怎麼完成的,還有就是程式是這麼執行的。

我試著解釋一下:在服務端使用PHP開發的時候,常常會將PHP、HTML、JS、CSS這些程式碼寫在一起,尤其是將PHP程式碼混合在後三者之中(CSS比較少)。但是實際上在執行的時候,這幾個部分是分別獨立執行的。

PHP只能在服務端執行,在請求發出之後,伺服器執行PHP腳本,對於PHP解釋器來說,它只能看到和執行中間的那部分程式碼,在執行這部分程式碼之後,會產生請求需要的數據,有時候這些數據是一個json字串,有時候這個東西就是一個包含HTML、JS、CSS這些程式碼的頁面。

題主問的PHP產生JS程式碼就是這時候產生的,對於PHP解譯器來說,那些JS程式碼和普通的字串沒有差別。

在這之後,伺服器從PHP的緩衝區讀出這些資料(例如包含了HTML、JS和CSS程式碼的頁面),然後將這些資料打包傳送給瀏覽器。瀏覽器內嵌了HTML、JS和CSS的解釋程序,所以瀏覽器可以執行HTML、JS和CSS程式碼。同樣的,因為瀏覽器沒有PHP解釋程序,所以瀏覽器是不能執行PHP代碼的。題主可以嘗試在本地寫一個靜態頁面,在其中寫一段PHP程式碼,然後用瀏覽器開啟觀察。

簡單來說,就像是有這麼一堵牆,牆的一邊是瀏覽器,它能執行​​HTML、JS和CSS;牆的另一邊是伺服器,它能執行​​PHP;兩者透過HTTP協定互動。對瀏覽器來說,因為不認識PHP程式碼,所以就算給它一段PHP程式碼,對它來說也就是一堆普通的字串。同樣的,對於伺服器來說,所謂HTML、JS和CSS程式碼跟「Hello,world」沒有任何差別。

不管是JS還是PHP都可以產生任何形式的字串,所以它們可以產生任何語言的程式碼。
再說遠一點兒,如果沒有程式去解釋執行,任何程式碼都只是一堆字串。

個人的一些看法,歡迎指正。

答案請見回答下@清泉月下的回答。

當年asp.net webform年代,就有「服務端註冊腳本到客戶端」的操作,畢竟那年頭前端還沒興起。

你這個問題應該拆成兩個問題來問:

  1. 不懂php為啥會回傳一段html程式碼?

  2. 不懂html為啥為夾了一段js程式碼?


大誤~

jsonp, 一種程式方法, 可以跨域.

陳述:
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn