繁体   English   中英

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

[英]Inserting a PHP variable in an HTML string being passed to JavaScript function via 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 ...

正确(功能正常,没有错误)... $ 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); })
         );
}

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

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