将PHP变量作为字符串传递给javascript

时间:2016-05-27 11:31:25

标签: javascript php html

不知何故,我的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作为字符串传递?我试图在它周围加上引号(例如:'.$id.',"'.$name.'",但这不起作用。

5 个答案:

答案 0 :(得分:6)

你必须逃避&#34;如果您希望它们持久化,请在字符串中引用:

echo '..... onClick="activateGroupSettingsOverlay('.$id.',\''.$name.'\')"....'

重要的是(单个)引号之前的反斜杠。

答案 1 :(得分:3)

它无法正常工作的原因是因为你没有在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

所在的位置

这样做的好处是你不必转义单引号,这使得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;

答案 2 :(得分:1)

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");

答案 3 :(得分:0)

更改

onClick="activateGroupSettingsOverlay('.$id.','.$name.')"

onClick="activateGroupSettingsOverlay('.$id.',"'.$name.'")"

答案 4 :(得分:0)

@chandresh_cool是对的,你必须&#34;强迫&#34;报价

onClick="activateGroupSettingsOverlay('.$id.',\''.$name.'\')"