我的网页有一个“加载”处理程序,它调用了一个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>

07-24 18:10