繁体   English   中英

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

[英]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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM