无法访问从 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([{"id":"6","class":"btest","name":"btestvar1"},{"id":"7","class":"btest","name":"btestvar2"}])"
也很丑
您也可以先在脚本中创建一个 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);
我正在尝试重建一个对象数组,以将具有等效键的对象组合在一起以传递给 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([{"id":"6","class":"btest","name":"btestvar1"},{"id":"7","class":"btest","name":"btestvar2"}])"
也很丑
您也可以先在脚本中创建一个 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);