在通过AJAX传递给JavaScript函数的HTML字符串中插入PHP变量?

时间:2016-03-31 18:11:17

标签: javascript php jquery ajax

是这样的:

$html .= "<table>"
$html .= "<tr onclick=\"test(" . $phpvar . ")\"><td>test</td></tr>";
$html .= "</table>"

$rVal=array("htmltable" => $html);
echo json_encode($rVal);

JS:

success: function(data){
    $("#content").html(data.htmltable);

可能?

当没有涉及PHP var时,一切都有效,但是我问是否有办法传递这样的PHP var ...

1 个答案:

答案 0 :(得分:2)

  

它是正确的(无错误运行)... $ phpvar的值是一个人的名字和姓氏的字符串,以及昵称

所以给出:

$phpvar = "John 'the Something' Smith";

$html的值为:

<table><tr onclick="test(John 'the Something' Smith)"><td>test</td></tr></table>

因此John将被视为JavaScript变量名称。然后你会遇到语法错误。

您需要将数据编码为JavaScript字符串文字。 json_encode会做到这一点。

$phpvar = "John 'the Something' Smith";

$javascript_literal = json_encode($phpvar);

$html = "";
$html .= "<table>";
$html .= "<tr onclick=\"test(" . $javascript_literal . ")\"><td>test</td></tr>";
$html .= "</table>";

print $html;

...但是仍然没有成功,因为它会给你:

<table><tr onclick="test("John 'the Something' Smith")"><td>test</td></tr></table>

... "将终止属性值。

所以你还需要为HTML编码。

$phpvar = "John 'the Something' Smith";

$javascript_literal = json_encode($phpvar);

$html_attribute_value = htmlspecialchars($javascript_literal);

$html = "";
$html .= "<table>";
$html .= "<tr onclick=\"test(" . $html_attribute_value . ")\"><td>test</td></tr>";
$html .= "</table>";

print $html;

会给你:

<table><tr onclick="test(&quot;John 'the Something' Smith&quot;)"><td>test</td></tr></table>

......这将有效。

但这太可怕了。并引发头痛。所以不要这样做。

  • 将数据传回客户端而不是标记。
  • 为任务使用适当的标记。你想要点击什么?使用按钮。不是桌子。

这样:

$rVal = array("plaindata" => $phpvar);
header("Content-Type: application/json");
echo json_encode($rVal);

success: function(data) {
    $("#content")
        .empty()
        .append(
            $("<button />")
                .text("test")
                .on("click", function() { test(data.plaindata); })
         );
}