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

时间:2015-01-28 19:27:44

标签: php jquery arrays object

我尝试重建一个对象数组,将对象组合在一起,传递给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
        )
)

我将它转换为基于"类"的分组。键在上面的数组中。

$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
                )

        )
)

我的目标是传递这个重建的数组,以便我可以根据每个"类"下的对象数量动态创建一些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);
}

新阵列的结构有问题吗?我一直在努力解决这个问题以及我所做的所有搜索以及我尝试过的解决方案,似乎没有任何效果。

1 个答案:

答案 0 :(得分:1)

问题在于引用:你的json字符串包含双引号,它打破了onclick =&#34; ...&#34;引用。

你可以使用

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);