3

可能重复:
如何使用 $.ajax() 将字符串数组从 PHP 传递到 Javascript?

我想将一个关联数组从 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>
4

2 回答 2

10

JSON 是完美的:

<?php

$mySweetJSONString = json_encode($myAssocPHPArray);

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

用户pst提出了这些担忧:

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

  • "What about ]]> which could occur in XHTML?"
    字符串可以传输。
    jsFiddle


更新:

关于调试 JS 的问题:
控制台中是否有任何错误?你的一个document.getElementById(...)可能返回一个空值。因此该成员value不存在。

于 2011-08-27T20:13:30.640 回答
0

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

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

这将呈现如下:

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

安全

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

PHPjson_encode()在标签中嵌入 JSON 时也是非常安全的<script>,因为 PHP 会转义/字符:

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

所以不可能写</script>,这是逃避<script>标签的唯一方法。(<script>标签中的所有内容都是脚本的一部分,它不会被解析为 HTML。) JSON允许/为此目的进行转义。

所以没有 JSON 字符串可以转义<script>标签。

于 2011-08-27T20:55:28.177 回答