[英]assigning php return value to a javascript variable
我在MySql表上有一個數據庫表單,我有一個javascript函數來填充select標簽的選項。 這些選項是從狀態為“活動”或“非活動”的客戶端表中獲取的,返回值是那些狀態為活動狀態的客戶端。 如果在客戶端狀態為非活動狀態的情況下加載訂單,我正在嘗試為非活動客戶端添加處理程序。 表單從一個php腳本加載,該腳本將客戶端表連接到主表,其中主表中的clientId
等於客戶端表中的Id
。 因此,無論狀態如何,我都會在函數外部獲取客戶端的名稱和ID以填充選項列表。
有一條線讓我適應。 我搜索了這個網站和其他人,並找到了很多解決方案,但到目前為止還沒有一個對我有用。 這是一行:
var txt = <?php echo $row[`clients`.'name']; ?> ;
Chrome和Firefox調試程序返回的內容是“未捕獲的語法錯誤:意外的令牌<”。 調試器顯示: var txt = <br />
我已經嘗試用單引號,雙引號和沒有引號括起php腳本,但仍然沒有運氣。 任何想法,任何人?
大約一個小時后 - >我找到了一個解決方法。 我嘗試了你的所有建議,但在這種情況下都沒有。 var_dump和json_encode確認了我已經知道的,返回的數據是有效的。 無論語法有何變化,它們都返回相同的錯誤。 我所做的是應用與上面相同的語法,但在隱藏的輸入中:
<input type="text" id="cName" hidden value="<?php echo $row[`clients`.'name']?>" />
然后將javascript代碼更改為:
var txt = document.getElementById('cName').value;
其他一切都很完美。 當然,我仍然對使用反引號有一些揮之不去的想法,並希望我有一個更好,更安全的代碼。 正如我在某處提到的,我只是直接從phpMyAdmin復制了sql語法。 在這種情況下,如果我用反引號替換單引號,則輸入不返回任何內容。 好吧,謝謝大家。 如果有人想貢獻更多,我會很高興聽到它。
這是非法的PHP語法,一般來說語法非常危險。 嘗試執行var_dump($row)
以查看該數組中的確切內容。 可能你想要更像的東西
var txt = <?php echo json_encode($row['clients.name']); ?>;
代替。
注意使用json_encode()
。 這將確保無論你在JS代碼塊中吐出什么,實際上是語法上有效的javascript。
例如,考慮如果你最終會發生什么
var txt = Miles O'Brien;
^^^^^--undefined variable;
^--- another undefined var
^--- start of a string
^^^^^^^---unterminated string.
使用json_encode(),你最終得到了
var txt = "Miles O'Brien";
一切都很好。
改變這個
var txt = <?php echo $row['clients'.'name']; ?> ;
對此:
var txt = <?php echo $row['clients']['name']; ?> ;
var txt = "<?php echo $row['clients']['name']; ?>";
var txt = <?php echo $row[`clients`.'name']; ?> ;
考慮PHP如何解析這個:
var txt =
將直接輸出到客戶端。
進入PHP模式。
echo
顯以下表達式。
評估$row[`clients`.'name']
。
首先,我們需要確定數組索引,它是`clients`
和'name'
的串聯。
PHP中的反引號是執行運算符 ,與shell_exec()
相同。 因此,PHP嘗試執行shell命令clients
,這可能會失敗,因為這不是您的意圖,也不存在。 因此,在此階段,PHP會輸出HTML錯誤消息,從換行符開始<br />
。
您的客戶端現在有var txt = <br />
(您可以通過檢查返回到瀏覽器的頁面的HTML源來驗證這一點),它會嘗試在其JavaScript上下文中進行評估。 這會導致您目睹的“意外令牌”錯誤。
正如其他人提到的那樣,你可能想要做一些像$row['clients']['name']
或$row['clients.name']
- 但是沒有看到PHP的其余部分,就不可能確定。 此外,正如@MarcB所觀察到的 ,您需要確定結果輸出是有效的JavaScript,並且可能希望使用類似json_encode()
的函數來適當地轉義該值。
該錯誤來自於您的返回值(javascript中的字符串)必須在引號中。
單引號將從字面上取得它們之間的任何內容,不會解釋轉義(如\\ n),使用雙引號。
var txt = "<?php echo $row['clients']['name']; ?>";
是你想要的
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.