将关联数组从php传递给javascript

时间:2011-08-27 20:09:45

标签: php javascript arrays json associative

  

可能重复:
  How to pass an array of strings from PHP to Javascript using $.ajax()?

我想将一个关联数组从php代码传递给javascript代码。请帮我。我该怎么做呢 ? JSON对此事有帮助吗?如果是,那么请提供一个简单的帮助代码。谢谢。

以下评论:
HTML + PHP代码

<td> 
    <input type="text" style="width:70;" name="<?php echo $quantity;?>" id="<?php echo $quantity;?>" onkeyup="check_valid_range('<?php echo $itemName;?>','<?php echo $quantity;?>',<?php echo json_encode($product_inventory);?>);">
</td> 
<script type="text/javascript"> 
    function check_valid_range(product_field, quantity_field, inventory){ 
        var product = document.getElementById(product_field).value; 
        var quantity = document.getElementById(quantity_field).value; 
        var v = inventory[product]; 
        alert(v); 
    } 
</script>

2 个答案:

答案 0 :(得分:9)

JSON非常完美:

<?php

$mySweetJSONString = json_encode($myAssocPHPArray);

?>
<script>
    var iWantThePHPArrayHere = <?php echo $mySweetJSONString; ?>;
</script>

用户pst提出了这些问题:

  • "array("</script>") -- darn, just broke this "perfect" approach."
    它似乎有效,因为(</script> =&gt; <\/script>):
    jsFiddle

  • "What about ]]> which could occur in XHTML?"
    该字符串可以转移。
    jsFiddle


<强>更新

关于用JS调试问题:
控制台中有错误吗?您的document.getElementById(...)之一可能会返回null。因此,成员value不存在。

答案 1 :(得分:0)

我一直认为JSON是为此而发明的:

<script>
    var myArray = <?=json_encode($myArray)?>;
</script>

这将呈现如下:

<script>
    var myArray = {"key":"value","key2":"value2",...};
</script>

Safeness

这对javascript非常安全,因为JSON是javascript语法的一个子集。这意味着任何JSON字符串都可以视为Javascript。

<script>标记中嵌入JSON时,

PHP's json_encode()非常安全,因为PHP会转义/字符:

json_encode('</script>');
=> "<\/script>"

因此无法编写</script>,这是逃避<script>标记的唯一方法。 (<script>标记中的所有内容都是脚本的一部分,它不会被解析为HTML。)JSON allows to escape the /用于此目的。

因此,没有JSON字符串可以转义<script>标记。