Как выполнить функцию JS, которая находится внутри тегов PHP?

#javascript #php #html #reactjs #react-native

#javascript #php #HTML #reactjs #react-native

Вопрос:

У меня есть приведенный ниже код в файле с именем test.php , задачей которого является создание объекта JSON и передача его функции в JS.

 <!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);
    $encodedJSON = json_encode($myJSON); //final variable in PHP to pass to below function.
    
    //JS begins here

    echo <<<JS001
    <script type="text/javascript">
    var msg = {$encodedJSON};
    var ThunkableWebviewerExtension = {
        postMessage: function (message) {
            if (window.ReactNativeWebView) {
                window.ReactNativeWebView.postMessage(message);
            } else {
                window.parent.postMessage(message, '*');'
            }
        }
    };
    ThunkableWebviewerExtension.postMessage(msg);
    alert(msg);
    </script>
JS001;
} else {
    echo 'Incorrect ID';
}
?>

</body>
</html>
  

У меня есть этот фрагмент скрипта, но я могу написать его только внутри PHP — потому что значение, требуемое функцией, хранится в переменной PHP. Все, что нужно сделать, это получить encodedJSON значение переменной PHP и сохранить его в локальной переменной JS msg . Затем я создал функцию, задачей которой является ОТПРАВКА сообщения, и вызвал ее next . Все это отлично работало при запуске в отдельном HTML-файле, в котором JS был написан отдельно.

Что я должен сделать, чтобы фрагмент кода JS выполнялся внутри кода PHP? Спасибо!

Комментарии:

1. Обычно я либо: 1. Похоже на то, что вы сделали, за исключением переменной (например, $jsString = «»; затем Эхо-строки внутри <script> tags. ИЛИ 2. Напишите код JS обычным способом (либо внешне в другом файле JS, либо в HTML) и установите глобальную переменную стиля в PHP. Итак, идея заключается в том, что код JS (написанный где угодно) использует переменную, определенную в представлении / файле PHP… независимо от цели (например var jsCode = ‘<?= $phpCode; ?»; ) that is all. затем в вашем JS-скрипте используйте jsCode, чтобы делать то, что вы хотите. ПРИМЕЧАНИЕ: обычно я делаю это с помощью jquery и $(document) . ready(), чтобы убедиться, что все переменные готовы к использованию. Надеюсь, это поможет

2. ПРИМЕЧАНИЕ: PHP выполняется до JS, поэтому JS не будет выполняться внутри кода PHP.

3. PHP выполняется на сервере. Вы не можете вызывать API-интерфейсы браузера, такие как postMessage, на сервере.

Ответ №1:

Учитывая, что $myjson содержит json строку in php , тогда

 var msg = {$myJSON};
  

для лучшего понимания приведенный выше код эквивалентен:

 var msg = JSON.parse('{$myJSON}')
  

это способ преобразовать ее в объект js из переменной php.

Пожалуйста, смотрите комментарии в коде для получения дополнительной помощи.

Пожалуйста, запустите приведенный ниже код и посмотрите, как console.log выполняется печать json объекта:

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

<body>

<?php
//started with hard coded data to show a working copy paste example
$row = array('date'=>'09-Oct-2020','txnid'=>1234,'atomid'=>456,'amount'=>21345);

if($row) {
    $obj = new stdclass(); //op should add this to avoid warning
    $obj->txndate = $row['date'];
    $obj->txnid = $row['txnid'];
    $obj->atomid = $row['atomid'];
    $obj->amount = $row['amount'];
    
    $myJSON = json_encode($obj);
    //to see the json encode value in php
    //var_dump($myJSON); 
    //this is not needed in op code
    //$encodedJSON = json_encode($myJSON); //final variable in PHP to pass to below function.
    
    //JS begins here

    echo <<<JS001
    <script type="text/javascript">
    //php json string is converted to js object here
    var msg = {$myJSON};
    //see msg object printed in console
    console.log(msg);
    </script>
JS001;
} else {
    echo 'Incorrect ID';
}
?>

</body>
</html>
  

Комментарии:

1. JSON уже является допустимым JavaScript (отсюда и название), нет необходимости что-либо декодировать : var msg = $myJSON; .