我有一个变量在PHP,我需要它的值在我的JavaScript代码。我怎么能把我的变量从PHP到JavaScript?

我有这样的代码:

<?php
$val = $myService->getValue(); // Makes an API and database call

在同一页上,我有JavaScript代码,需要$val变量的值作为参数传递:

<script>
    myPlugin.start($val); // I tried this, but it didn't work
    <?php myPlugin.start($val); ?> // This didn't work either
    myPlugin.start(<?=$val?>); // This works sometimes, but sometimes it fails
</script>

当前回答

我想出了一个简单的方法来分配JavaScript变量使用PHP。

它使用HTML5数据属性来存储PHP变量,然后在页面加载时分配给JavaScript。

例子:

<?php
    $variable_1 = "QNimate";
    $variable_2 = "QScutter";
?>
    <span id="storage" data-variable-one="<?php echo $variable_1; ?>" data-variable-two="<?php echo $variable_2; ?>"></span>
<?php

下面是JavaScript代码

var variable_1 = undefined;
var variable_2 = undefined;

window.onload = function(){
    variable_1 = document.getElementById("storage").getAttribute("data-variable-one");
    variable_2 = document.getElementById("storage").getAttribute("data-variable-two");
}

其他回答

根据你的代码

<$php
     $val = $myService->getValue(); // Makes an API and database call
     echo '<span id="value">'.$val.'</span>';
$>

现在你可以使用DOM,使用innerHTML (span id)来获取值,在这种情况下你不需要调用任何服务器,或者Ajax或其他东西。

您的页面将使用PHP打印它,而JavaScript将使用DOM获取值。

<script>
  var jsvar = <?php echo json_encode($PHPVar); ?>;
</script>

json_encode()要求:

PHP 5.2.0或更高版本 $PHPVar编码为UTF-8, Unicode。

我想出了一个简单的方法来分配JavaScript变量使用PHP。

它使用HTML5数据属性来存储PHP变量,然后在页面加载时分配给JavaScript。

例子:

<?php
    $variable_1 = "QNimate";
    $variable_2 = "QScutter";
?>
    <span id="storage" data-variable-one="<?php echo $variable_1; ?>" data-variable-two="<?php echo $variable_2; ?>"></span>
<?php

下面是JavaScript代码

var variable_1 = undefined;
var variable_2 = undefined;

window.onload = function(){
    variable_1 = document.getElementById("storage").getAttribute("data-variable-one");
    variable_2 = document.getElementById("storage").getAttribute("data-variable-two");
}

我假设要传输的数据是一个字符串。

正如其他评论者所述,AJAX是一种可能的解决方案,但缺点大于优点:它有延迟,并且更难编程(它需要代码来检索服务器端和客户端值),而更简单的转义函数应该就足够了。

所以,我们又回到了逃避。如果您首先将源字符串编码为UTF-8, json_encode($string)就可以工作,因为json_encode需要UTF-8数据。如果字符串在ISO-8859-1中,那么您可以简单地使用json_encode(utf8_encode($string));否则,你总是可以先使用iconv来进行转换。

但这里有个大问题。如果你在事件中使用它,你需要在结果上运行htmlspecialchars(),以使它成为正确的代码。然后,您必须小心使用双引号将事件括起来,或者始终将ENT_QUOTES添加到htmlspecialchars中。例如:

<?php
    $myvar = "I'm in \"UTF-8\" encoding and I have <script>script tags</script> & ampersand!";
    // Fails:
    //echo '<body onload="alert(', json_encode($myvar), ');">';
    // Fails:
    //echo "<body onload='alert(", json_encode($myvar), ");'>";
    // Fails:
    //echo "<body onload='alert(", htmlspecialchars(json_encode($myvar)), ");'>";

    // Works:
    //echo "<body onload='alert(", htmlspecialchars(json_encode($myvar), ENT_QUOTES), ");'>";
    // Works:
    echo '<body onload="alert(', htmlspecialchars(json_encode($myvar)), ');">';

    echo "</body>";

然而,你不能在常规JavaScript代码上使用htmlspecialchars(代码包含在<script>…> < /脚本标签)。这使得使用这个函数容易出错,在编写事件代码时忘记htmlspecialchars结果。

可以编写一个不存在该问题的函数,并且可以在事件和常规JavaScript代码中使用,只要始终用单引号或双引号括起事件。以下是我的建议,要求它们在双引号中(我更喜欢这样):

<?php
    // Optionally pass the encoding of the source string, if not UTF-8
    function escapeJSString($string, $encoding = 'UTF-8')
    {
        if ($encoding != 'UTF-8')
            $string = iconv($encoding, 'UTF-8', $string);
        $flags = JSON_HEX_TAG|JSON_HEX_AMP|JSON_HEX_APOS|JSON_HEX_QUOT|JSON_UNESCAPED_SLASHES;
        $string = substr(json_encode($string, $flags), 1, -1);
        return "'$string'";
    }

该函数需要PHP 5.4+。使用示例:

<?php
    $myvar = "I'm in \"UTF-8\" encoding and I have <script>script tags</script> & ampersand!";
    // Note use of double quotes to enclose the event definition!
    echo '<body onload="alert(', escapeJSString($myvar), ');">';
    // Example with regular code:
    echo '<script>alert(', escapeJSString($myvar), ');</script>';
    echo '</body>';

诀窍是这样的:

下面是使用该变量的“PHP”: <?php $name = 'PHP变量'; 回声的< >脚本; 返回'var name = '。json_encode()美元。';; 回声的> < /脚本; ? > 现在你有了一个名为“name”的JavaScript变量,下面是使用该变量的JavaScript代码: <脚本> console.log(“我无处不在”+名字); > < /脚本