【问题标题】:passing php string of JSON ( with qoutes) to onclick function将 JSON 的 php 字符串(带引号)传递给 onclick 函数
【发布时间】:2014-02-06 12:00:31
【问题描述】:

我正在尝试将一组数据从 php 传递到 java 脚本以用于“onclick”事件。 我通过将数组数据转换为 JSON 字符串来实现,以便在 js 函数中将其解析回并进行处理。

问题是 JSON 字符串包含双引号,因此当双引号破坏 html 字符串时会出现错误(Uncaught SyntaxError: Unexpected token ILLEGAL)。我确实看到了几个与此类似的问题,但没有找到我需要的解决方案,或者我可能没有理解正确的解决方案。所以我在这里提出了我的具体案例。

<?php 
    ..some php code here..
    $aData = array("You","Me",76,array(3,6));
    $sJSONstr = json_encode($aData);
?>

<input type="button" name="formSubmit" value="Delete" onclick="analyze('<?php echo $sJSONstr; ?>')">

 <?php 
    ..some php code here..
 ?>

而js函数如下:

function analyze(i_sInputDataJSONStr) 
{   
var aInputData = JSON.parse(i_sInputDataJSONStr);

    .. So something with the input data array..
}

【问题讨论】:

    标签: javascript php json onclick


    【解决方案1】:

    对 onclick 属性使用单引号而不是双引号。单引号和双引号一样有效。

    还有一件事,由于您已经拥有 JSON 格式的数据,因此无需将其作为字符串放在 analyze 函数调用中,因为您的 JSON 数据是一个有效的 JavaScript 数组(这就是 JSON 的含义:JavaScript 对象表示法)。 因此,您不必在 analyze 函数声明中解析输入字符串。

    考虑以下示例,这是完全有效的代码。

    <?php
        $arr = ["Hello", "World"];
        $json = json_encode($arr); // $json = '["Hello","World"]'
    ?>
    <div id="myDiv" onclick='doSomething(<?php echo $json; ?>)'>Click me</div>
    
    <script type="text/javascript">
    function doSomething(data){
        for (var i = 0; i < data.length; i++) {
            alert(data[i]);
        }
    }
    </script>
    

    【讨论】:

    • 你怎么能这么说?在onclick="analyze('&lt;?php echo $sJSONstr; ?&gt;')" 中,他已经在onclick() 中给出了单引号
    • 谢谢,但我还需要在 以便它是一个字符串而不是一个对象。那我该怎么做呢?
    • @Kannan 请查看我的更新答案。由于他的数据是JSON,所以没有必要将其作为字符串(并再次解析)。
    • 太好了……谢谢安东。事实上,我通过 JSON“字符串”做了一个不需要的回合。但正如你所说,我可以将它作为对象发送,仅此而已。所以我可以放单引号。
    • 是的,我自己也犯了同样的错误;没有考虑 JSON 实际上是有效的 JavaScript 的事实
    【解决方案2】:

    创建一个javascript字符串并传递它:

    <script type="text/javascript">
    var myjson = '<?php echo $sJSONstr; ?>';
    </script>
    

    然后:

    onclick="analyze(myjson)"
    

    【讨论】:

      【解决方案3】:
      <input type="button" name="formSubmit" value="Delete" onclick='analyze(<?php echo $sJSONstr?>)'>
      

      将onclick=''中的双引号替换为单引号; 对我来说就像一个魅力。

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2016-12-09
        • 2011-02-12
        • 1970-01-01
        • 2014-04-13
        • 2016-11-08
        相关资源
        最近更新 更多