2013-05-07 24 views
-4

爲什麼在傳遞給javascript之前需要回顯PHP變量?將PHP數組傳遞給Javascript:爲什麼需要回顯PHP變量?

例如,

drawChart(600/50, <?php echo $day; ?>, ...) 

爲什麼我需要的零件?爲什麼不只是做

drawChart(600/50, $day, ...) 

謝謝

+1

應如何腳本知道你的意思'$ day'是一個PHP變量或JavaScript變量? – JJJ 2013-05-07 20:35:02

+0

所以回聲傳遞值而不是變量給JS? – 2013-05-07 20:36:46

回答

2

您提出的問題需要解釋一個強烈的概念問題。 PHP代碼是在Web服務器處理,被稱爲服務器端代碼,而JavaScript代碼的Web瀏覽器服務器返回頁面的HTML,被稱爲客戶端代碼執行。所以,你在不同的平臺上有不同的執行階段。 JavaScript代碼無法評估PHP源代碼,也不瞭解PHP變量及其狀態。

在你的問題中的代碼代表一個JavaScript函數調用的參數之一正好是一個PHP變量。在瀏覽器收到它之前,PHP變量必須在服務器上進行評估,因此JavaScript調用將正常工作。如果$day變量的值爲13(對於示例的緣故),以下代碼:

drawChart(600/50,<?php echo $day; ?>, ...)

將被渲染到HTML這樣的:

drawChart(600/50,13, ...)

但是,如果你跳過PHP的東西,你會得到:

drawChart(600/50,$day, ...)

這可能不會在瀏覽器中運行。

此外,您可能有一個名稱爲$day的JavaScript變量,因此代碼將使用它而不是PHP評估過的一個,甚至可以正常工作,但出現意外的行爲。

2

更新:這個一個更好的解釋在一箇舊問題的答覆是可用的。

What is the difference between client-side and server-side programming?


這混淆了很多Web開發人員早期。

你的PHP代碼運行服務器端。變量$day在Web請求到達您的服務器時進行評估。

你的JavaScript代碼運行客戶端。從服務器的角度來看,這是一堆發送到用戶瀏覽器的靜態文本。然後瀏覽器將此靜態文本解釋爲代碼並執行它。

你不能「共享」,因爲在執行JavaScript的時間PHP和JavaScript之間的變量,你是在一個服務器運行PHP上下文不再。

因此,您使用echo輸出$day的值,而它是PHP上下文中的變量;它的值然後被注入到JavaScript中,它不再是客戶端上下文中的變量。 (相反,在你的例子這將是,如果你叫drawChart用硬編碼值。)