簡體   English   中英

使用json_encode通過onClick()將字符串數組傳遞給javascript

[英]Pass an array of strings to javascript via onClick() using json_encode

**更新-雖然我的解決方案有效(並且我還沒有聽說為什么不使用htmlspeciatchars()),但我包括Jacob Mouka創造性解決方案的修改版本,該版本成功避免了使用它。 **

我試圖使用json_encode通過onClick()將字符串數組傳遞給javascript。 僅傳遞json_encode($ array)不起作用。 我推測由於json_encode($ array)返回[“ a”,“ b”,“ c”],引號是問題所在。 我成功地用htmlentities()包裝了json_encode($ array),然后使用JSON.parse(array)將字符串轉換回數組。

我閱讀了該網站上的所有帖子,但沒有一個帖子將此組合作為解決方案,我想知道我是否使它變得比應有的復雜。 htmlentities()是正確使用的函數嗎? 有沒有更簡單的方法將此數組從onclick()發送到javascript函數? 提前致謝。

Java腳本

<script>
function shohmultiple(array){
  alert("Aray as string: " + array);
  array = JSON.parse(array)
  for (i=0; i< array.length; i++){ 
    alert(array[i]);
  }
}
</script>

<?php $array=array("a", "b", "c"); ?>

的HTML

<a href="#" onClick="shohmultiple('<?php echo htmlspecialchars(json_encode($array)) ?>')">Click Here</a>

Jacob Mouka的修改后的解決方案(針對我正在尋找的工作流程)

Java腳本

<script type="text/javascript">

function shohmultiple (array) {
    for (i=0; i< array.length; i++){ 
        alert(array[i]);
    }
}
</script>

的HTML

<?php $array = array("a", "b", "c"); ?>

<script>
    // calling this before outputting <a href> works
    <?php  echo "var js_array = " . json_encode($array) . ";"; ?>
</script>

<a href="#" onClick="shohmultiple(js_array);">Click Here</a>

(經過一些測試后編輯)

問題實際上是json_encode使用雙引號,它與內聯javascript混亂(它也使用雙引號)。 如果有某種方法可以強制json_encode使用單引號,則可以解決此問題(但我認為沒有)。 一個笨拙的解決方案是這樣的:

<script type="text/javascript">
<?php
    $array = array("a", "b", "3");
    echo "var js_array = " . json_encode($array) . ";";
?>
    function shohmultiple (val) {
        window.foo = val;
        console.log('got',val);
    }

</script>


<a href="#" onClick="shohmultiple(js_array);">Click Here</a>

如果要避免使用htmlspecialchars(),請用單引號括住onClick,然后轉義json字符串引號。 這不能確保執行的能力(如果您的json包含單引號,則會中斷),但可以解決該問題。

像這樣嘗試:

<a href="#" onClick='shohmultiple(\'<?php echo(json_encode($array)); ?>\')'>Click Here</a>

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

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