我的网页有一个“加载”处理程序,它调用了一个javascript函数“ handleLoad()”,在我尝试在PHP中传递json_encode的输出后,该函数现已停止工作(未调用)。
<body onload="handleLoad('<?php echo $myJsonArr ?>')">
我也尝试过:
<body onload="handleLoad(<?php echo $myJsonArr ?>)">
和:
<body onload='handleLoad("<?php echo $myJsonArr ?>")'>
玩弄引号,什么也没有。 handleLoad()不再被调用。
现在,myJsonArr的传递阻止了handleLoad()函数的执行-我知道这一点,因为handleLoad()中的第一行代码(即javascript)如下所示:
function handleLoad(jsonArr)
{
alert("just entered handleLoad()");
.....other code not shown, and 100% commented out during fixing this bug
}
上面的“ alert”框将看起来很好-直到我添加了“ jsonArr” JSON嵌套数组,此后“ alert”框根本没有显示。我删除了来自handleLoad()的所有代码,除了alert()框之外,以消除任何其他原因-并且handleLoad()未被调用,尽管handleLoad()现在唯一的事情是对alert()的简单调用。
像这样从数据库读取创建jsonArr:
$result = mysql_query($query);
$numrows = mysql_num_rows($result);
$theOuterArray = array();
for($i = 0; $i < $numrows; $i++)
{
$theRow = mysql_fetch_row($result);
$cityName = $theRow[1];
$lat = $theRow[2];
$lng = $theRow[3];
// AND SO ON FOR address, titleOnly, recordNum, cityName, etc. used next....
$nestedArray = array($cityName, $lat, $lng, $i, $address, $titleOnly,
$recordNum, $cityName, $stateName, $price);
$theOuterArray[] = $nestedArray;
}
$myJsonArr = json_encode($theOuterArray);
var_dump($myJsonArr);
这是var_dump向我展示的内容-为了使事情变得简单,我只在数据库中放置了一条记录:
string(136) "[["Auburn","32.6121","-85.4819",0,"Main Street","Test to debug why handleLoad() not being invoked","53378577","Auburn","Alabama","995"]]"
我在这里想念什么吗?我成功读取了数据库,但是创建然后将该json数组传递给我的“ onload”处理程序会破坏代码。
编辑:建议是在body标签中在Firefox的我的页面上提供生成的onload的源,这里是:
<body onload="handleLoad('[["Auburn","32.6121","-85.4819",0,"Main Street","Test to debug why handleLoad() not being invoked","53378577","Auburn","Alabama","995"]]')">
最佳答案
编辑:以前的jQuery答案已删除。
这可行。您需要在json数组上使用htmlentities(),然后再将其传递回去。
的PHP:
<?php
$myVar = '[["Auburn","32.6121","-85.4819",0,"Main Street","Test to debug why handleLoad() not being invoked","53378577","Auburn","Alabama","995"]]';
$myVar = htmlentities($myVar);
?>
HTML:
<body onload="handleLoad('<?php echo $myVar; ?>')">
<script>
function handleLoad(data) {
alert(data);
}
</script>
</body>