无法访问从 PHP 传递给 jQuery 的重组数组

Cannot Access Restructured Array Passed to jQuery from PHP

我正在尝试重建一个对象数组,以将具有等效键的对象组合在一起以传递给 jQuery 函数。目前,我有一个这样的数组:

$myOldArr =

Array
(
    [0] => stdClass Object
        (
            [id] => 10
            [class] => atest
            [name] => atestvar1
        )

    [1] => stdClass Object
        (
            [id] => 6
            [class] => btest
            [name] => btestvar1
        )

    [2] => stdClass Object
        (
            [id] => 7
            [class] => btest
            [name] => btestvar2
        )

    [3] => stdClass Object
        (
            [id] => 8
            [class] => ctest
            [name] => ctestvar1
        )
)

然后我根据上面数组中的"class"键将其转化为这个分组。

$myNewArr =

Array
(
    [atest] => Array
        (
            [0] => stdClass Object
                (
                    [id] => 10
                    [class] => atest
                    [name] => atestvar1
                )

        )

    [btest] => Array
        (
            [0] => stdClass Object
                (
                    [id] => 6
                    [class] => btest
                    [name] => btestvar1
                )

            [1] => stdClass Object
                (
                    [id] => 7
                    [class] => btest
                    [name] => btestvar2
                )

        )

    [ctest] => Array
        (
            [0] => stdClass Object
                (
                    [id] => 8
                    [class] => ctest
                    [name] => ctestvar1
                )

        )
)

我的目标是传递这个重建的数组,这样我就可以根据每个 "class" 下的对象数量动态创建一些 DOM。但是,当我将 php 中的部分新数组传递给 jQuery

foreach (array_keys($myNewArr) as $item) {
?>
    <div onclick="myjQueryFcn(<?php echo json_encode($myNewArr[$item]); ?>)></div>
<?php
}

jQuery 函数执行失败。如果我没有 json_encode 数组,jQuery 会检测到为参数发送的函数。

编码显示我正在获取 $myNewArr[$item="btest"] 的以下 json 对象:

[{"id":"6","class":"btest","name":"btestvar1"},{"id":"7","class":"btest","name":"btestvar2"}]

myjQueryFcn 目前只是在输出警报。

function myjQueryFcn(json) {
    alert(typeof json);
}

我的新数组结构有问题吗?我一直在为此苦苦挣扎,对于我所做的所有搜索和尝试的解决方案,似乎没有任何效果。

这里的问题是引号:您的 json 字符串包含双引号,这会破坏 onclick="..." 引号。

您可以使用

onclick='...'

或在您的字符串中使用 html 个实体:

onclick="myjQuerFcn([{&quot;id&quot;:&quot;6&quot;,&quot;class&quot;:&quot;btest&quot;,&quot;name&quot;:&quot;btestvar1&quot;},{&quot;id&quot;:&quot;7&quot;,&quot;class&quot;:&quot;btest&quot;,&quot;name&quot;:&quot;btestvar2&quot;}])"

也很丑

您也可以先在脚本中创建一个 javascript 变量:

<script>
var obj = '<?php json_encode($myNewArr[$item="btest"]); ?>'
</script>
<div onclick="myjQueryFcn(obj);"></div>

更不用说这不是编程的艺术...

更好的解决方案是使用 ajax 获取您的 (json) 数据,但这需要更多基础设施:

// java script part:
$.getJSON('php-script.php', function(data){
   $.each(data,function(index,entry) {
       var div = $('<div></div>').on('click', function() {
          alert(entry); // [Object]
       }
       $(document).append(div);
   });
});

--

<?php
// php-script.php:
echo json_encode($myNewArr);