[英]Passing PHP variables as strings to javascript
不知何故,我的php函数,它创建一个调用javascript函数的按钮,不会将php变量作为字符串传递。
function addTableEntry($id, $name)
{
echo('<tr>
<td>'.$id.'</td>
<td>'.$name.'</td>
<td><a href="#groups" onClick="activateGroupSettingsOverlay('.$id.','.$name.')">Manage group</a>
</tr>');
}
addTableEntry(1,"livingroom");
只要单击它,函数activateGroupSettingsOverlay()
就会被(1,livingroom)调用,并且我得到一个错误“livingroom is undefined”。
如何将$ name作为String传递? 我试图在它周围加上引号(像这样: '.$id.',"'.$name.'"
,但这不起作用。
如果你希望它们持久存在,你必须在字符串中“转义”引号:
echo '..... onClick="activateGroupSettingsOverlay('.$id.',\''.$name.'\')"....'
重要的是(单个)引号之前的反斜杠。
它不起作用的原因是因为你没有在javascript中包含引号。
虽然其他答案“修复”了他们没有真正解释的问题,但要清楚这一点
<td><a href="#groups" onClick="activateGroupSettingsOverlay('.$id.','.$name.')">Manage group</a>
输出是这样的
<td><a href="#groups" onClick="activateGroupSettingsOverlay(1,livingroom)">Manage group</a>
livingroom
没有报价,因此javascirpt将其视为变量,因此未定义错误。 要修复它,你希望它在输出时看起来像这样。
<td><a href="#groups" onClick="activateGroupSettingsOverlay(1,'livingroom')">Manage group</a>
您需要更改此行
<td><a href="#groups" onClick="activateGroupSettingsOverlay('.$id.',\''.$name.'\')">Manage group</a>
使用转义添加单引号\\'
。
就个人而言,我喜欢使用所谓的HEREDOC或NEWDOC <<<HTML
HTML;
和<<<'HTML'
HTML;
各自。 HEREDOC就像使用"
和新文档就像使用'
一样,你不能在NEWDOC中使用php变量,但如果你将它们括在{ }
大括号中,你可以在HEREDOC内。因此我们会想要使用HEREDOC我们可以在输出中使用php变量。
function addTableEntry($id, $name)
{
echo <<<HTML
<tr>
<td>'.$id.'</td>
<td>'.$name.'</td>
<td><a href="#groups" onClick="activateGroupSettingsOverlay({$id},'{$name}')">Manage group</a>
</tr>
HTML;
}
addTableEntry(1,"livingroom");
http://php.net/manual/en/language.types.string.php - 向下滚动到HEREDOC
所在的HEREDOC
这样做的好处是你不必转义单引号,这使得IMO更具可读性。 HEREDOC或NEWDOC的诀窍是结束HTML;
必须开始一个新的行,可能是该行唯一的东西,没有前导或尾随空格,或它将无法正常工作..
对于这种情况,它可能很简单,可以逃脱你如何做,但如果你需要在javascript中使用连接,引号将变得麻烦。 例如,假设您想使用带有javascirpt变量的javascript为图像名称添加html图像标记,但使用php获取服务器主机名(html和javascript中的变量)。
echo '
var foo = "image.jpb";
$(body).html( \'<img src="'.$_SERVER['HTTP_HOST'].'\'+foo+\'" />\' );
';
这很快就变得难以管理,因为(不管怎么说,不管怎样我都没有这个权利)。 比较这是多么清洁,因为你不是在浪费PHP中的引号....
echo <<<HTML
var foo = "image.jpb";
$(body).html( '<img src="{$_SERVER['HTTP_HOST']}'+foo+'" />' );
HTML;
Please try with this code:-
function addTableEntry($id, $name)
{
echo("<tr>
<td>".$id."</td>
<td>".$name."</td>
<td><a href=\"#groups\" onClick=\"activateGroupSettingsOverlay($id,'$name')\">Manage group</a>
</tr>");
}
addTableEntry(1,"livingroom");
更改
onClick="activateGroupSettingsOverlay('.$id.','.$name.')"
至
onClick="activateGroupSettingsOverlay('.$id.',"'.$name.'")"
@chandresh_cool是对的,你必须“强制”引号
onClick="activateGroupSettingsOverlay('.$id.',\''.$name.'\')"
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.