当我尝试在PHP中运行此JS代码时,为什么什么也没发生?

时间:2020-10-08 16:15:58

标签: javascript php html reactjs react-native

我有一个名为test.php的文件,其中包含整个代码:

<!DOCTYPE html>
<html lang="en">
<head>
  <title>Payment Receipt</title>
</head>
<body>

<?php
...
$result = $stmt->get_result();
$row = $result->fetch_assoc();

if($row) {
    $obj->txndate = $row['date'];
    $obj->txnid = $row['txnid'];
    $obj->atomid = $row['atomid'];
    $obj->amount = $row['amount'];
    
    $myJSON = json_encode($obj);
    echo $myJSON;

    //javascript starts inside PHP

    echo '<script>', PHP_EOL;
    echo 'var msg = <?php echo json_encode($myJSON); ?>;', PHP_EOL;
    echo 'var ThunkableWebviewerExtension = {', PHP_EOL;
    echo 'postMessage: function (message) {', PHP_EOL;
    echo 'if (window.ReactNativeWebView) {', PHP_EOL;
    echo 'window.ReactNativeWebView.postMessage(message);', PHP_EOL;
    echo '} else {', PHP_EOL;
    echo 'window.parent.postMessage(message, '*');', PHP_EOL;
    echo '}', PHP_EOL;
    echo '}', PHP_EOL;
    echo '}', PHP_EOL;
    echo 'ThunkableWebviewerExtension.postMessage(msg);', PHP_EOL;
    echo '</script>', PHP_EOL;
    
} else {
    echo 'Incorrect ID';
}

$conn->close();

?>

</body>
</html>

当我运行这段代码时,JavaScript方面没有任何反应-一切正常,直到JavaScript启动。这是我尝试嵌入到PHP代码中的JavaScript代码:

<!DOCTYPE html>
<html>
<body>

<?php
$myJSON = 'Hi there!';
?>

<script>
var msg = <?php echo json_encode($myJSON); ?>;
var ThunkableWebviewerExtension = {
    postMessage: function (message) {
        if (window.ReactNativeWebView) {
            window.ReactNativeWebView.postMessage(message);
        } else {
            window.parent.postMessage(message, '*');
        }
    }
}

ThunkableWebviewerExtension.postMessage(msg);
</script>

</body>
</html>

当我在另一个文件中分别运行上述代码时,上面的代码可以按预期运行,该文件在var msg命令中也传递了PHP变量。

我想知道在PHP中编写JavaScript代码时做错了什么-通过回显该语句,然后在末尾添加PHP_EOL,我们发现可以在PHP之间编写JS / HTML了。

这是怎么了?任何帮助将不胜感激!

1 个答案:

答案 0 :(得分:1)

这不起作用:

echo '<script>', PHP_EOL;
echo 'var msg = <?php echo json_encode($myJSON); ?>;', PHP_EOL;

因为它将PHP代码发送到客户端,由于它没有PHP解析器,该代码将不会执行。

这样写:

$jsonEncoded = json_encode($myJSON);

echo <<<JS001
<script>
var msg = {$jsonEncoded};
var ThunkableWebviewerExtension = {
    postMessage: function (message) {
        if (window.ReactNativeWebView) {
            window.ReactNativeWebView.postMessage(message);
        } else {
            window.parent.postMessage(message, '*');'
        }
    }
};
ThunkableWebviewerExtension.postMessage(msg);
</script>
JS001;
// The line above must end in ";" (not even spaces after) and the J must start
// on the very first columns.

同一文件中的其他节将称为JS002,依此类推。在每个“这里文档”部分中,如果您想嵌入一个php变量,请像{$variable}那样写,如果您有一个$则用反斜杠\$对其进行转义。