簡體   English   中英

將php返回值分配給javascript變量

[英]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如何解析這個:

  1. var txt =將直接輸出到客戶端。

  2. 進入PHP模式。

  3. echo顯以下表達式。

  4. 評估$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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM