![](/img/trans.png)
[英]How to pass an array from php (using json_encode) to 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.