将JSON编码的PHP数组传递给HTML onclick

时间:2017-09-07 21:51:10

标签: javascript php html json

我试图填充我的jquery数据表并且我已经成功地这样做了。 除非我在html标记中的一个javascript函数参数中传递JSON编码的字符串。我使用PHP中的以下代码。如下所示,我在onclick部分的函数的最后一个参数上传递了$ update_data变量的json_encode。

                       $update_data = 
                            array(
                            array('Page type',array( array('1 - Standard','Standard'), array('2 - HTML','HTML') ),'select','noval'),
                            array('title',$row->title,'input','val'),
                            array('header',$row->header,'input','noval'),
                            array('footer',$row->footer,'input','noval'),
                            );

$subarray[]='<center> <span data-target="#updatepost'.$row->_id.'" data-toggle="modal" onclick="easy_update(\'update\',\'post\',\'book/update-book-folder-designation\','.$row->_id.',\'Update Pages\',\''.json_encode($update_data).'\')" class="btn fa fa-pencil"></span> </center>';

然后我收到错误

  

未捕获的SyntaxError:无效或意外的令牌

当我从onclick调用该函数时。但是javascript错误行指向什么。

我的javascript函数就像

一样
function easy_update(type,method,url,id,header_title,data){

 }

我怀疑它是关于json字符串的格式化导致阅读我的js函数参数的混乱,但我不确定。 以下是来自inspect元素

的渲染html标记的图像

rendered view

当我用常规字符串替换json编码的字符串作为参数时,我没有得到任何错误。我希望我能提供足够的信息。

1 个答案:

答案 0 :(得分:0)

我想你试图在客户端函数easy_update()上使用字符串参数作为JS对象。尝试发送data不带引号,如下所示:

$subarray[]='<center> <span data-target="#updatepost'.$row->_id.'" data-toggle="modal" onclick="easy_update(\'update\',\'post\',\'book/update-book-folder-designation\','.$row->_id.',\'Update Pages\','.json_encode($update_data).')" class="btn fa fa-pencil"></span> </center>';

此外,您需要替换标签中的引号或json_encode()结果中的引号,例如:

$var = str_replace('"', '\'', json_encode($update_data));

然后将其发送给函数,其中一个可能的选项是:

$encoded = str_replace('"', '\'', json_encode($update_data));
$subarray[]='<center> <span data-target="#updatepost'.$row->_id.'" data-toggle="modal" onclick="easy_update(\'update\',\'post\',\'book/update-book-folder-designation\','.$row->_id.',\'Update Pages\','.$encoded.')" class="btn fa fa-pencil"></span> </center>';