Как отправить значение обычной переменной из PHP в JavaScript?

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

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

Вопрос:

В моем файле есть приведенный ниже фрагмент кода test.php . В основном код содержит переменную, определенную в PHP, и я хочу отправить ее в функцию JavaScript, чтобы она могла ее ОПУБЛИКОВАТЬ. Вот код :

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

<body>

<?php
...
if($row) {
    $myValue = 'Hi there!'; //the PHP variable (currently has a sample value, but will be string only)

    //JS starts    

    echo <<<JS001
    <script type="text/javascript">
    var msg = {$myValue}; //trying to set it to a JS var, so I could send it to below function.
    var ThunkableWebviewerExtension = {
        postMessage: function (message) {
            if (window.ReactNativeWebView) {
                window.ReactNativeWebView.postMessage(message);
            } else {
                window.parent.postMessage(message, '*');
            }
        }
    };
    
    ThunkableWebviewerExtension.postMessage(msg);
    console.log(msg);
    alert('Message Sent');
    </script>
JS001;
    
} else {
    echo 'Incorrect Value';
}

?>

</body>
</html>
  

Но когда я запускаю этот код, я получаю эту ошибку на консоли : Uncaught SyntaxError: Unexpected identifier . Что мне делать, если я хочу отправить простое строковое значение в JS-код? Что сейчас не так?

Любая помощь приветствуется! Спасибо!

Ответ №1:

Вы можете сделать:

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

<body>

<?php
...
if($row) {
    $myValue = 'Hi there!';
?>
<script>
var msg = "<?php echo $myValue; ?>"; //trying to set it to a JS var, so I could send it to below
//Your remaining js script here ...

</script>
<?php } else { 
//your else condition
}
?>
</body>
</html>
  

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

1. Спасибо, @mPareek! Я просто хочу подтвердить две вещи — 1) Я вижу, вы не поставили точку с запятой в конце $myValue . Это специально? 2) Разбиение кода PHP на две части не приведет к каким-либо ошибкам, верно?

2. # 1 О, это была опечатка. Я пропустил это. Вы можете поместить его туда. # 2 НЕТ, это не вызовет никаких ошибок.

3. Спасибо. моя функция JS также будет присутствовать в <script> тегах, верно?

4. Спасибо, я проверю и посмотрю, работает ли этот код для меня.

5. @BigSantuary Пожалуйста, обратите внимание, что я добавил echo переменную before. Вы должны повторить переменную, чтобы иметь возможность использовать ее в js.

Ответ №2:

Попробуйте это

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

<body>

<?php
...
if($row) {
    $myValue = 'Hi there!'
?>
<script>
var msg = "<?php $myValue; ?>";

</script>
<?php } else { 
  echo 'Incorrect Value';
}
?>
</body>
</html>
  

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

1. Как имеет смысл публиковать точно такой же ответ, как и я? Если вы хотите внести свой вклад, укажите какой-нибудь другой способ сделать это.

2. Если вид у тебя явно не один и тот же ответ, <?php $myValue; ?>твоя скучает двоеточие

3. Спасибо, @chyke007! Нужно ли добавлять эту точку с запятой после $myValue ?

4. @BigSantuary технически это не будет иметь значения, если вы не напишете что-нибудь после этого. Но я рекомендую вам поместить его для единообразия и избежать путаницы (как у нас сейчас 🙂 ).

5. Добавлено, чтобы показать, как это делается, если требуется второй оператор.

Ответ №3:

Упрощение вашего кода (что вы всегда должны делать при отладке!) у вас есть это:

 $myValue = 'Hi there!';
echo <<<JS001
<script type="text/javascript">
var msg = {$myValue};
</script>
JS001;
  

Если вы посмотрите на HTML, который возвращается в браузер, вы увидите, что он выглядит следующим образом:

 <script type="text/javascript">
var msg = Hi there!;
</script>
  

Браузер понятия не имеет, что «Привет!» должен был быть строкой, поэтому он пытается выполнить его как код.

Вы хотели, чтобы результат был таким:

 <script type="text/javascript">
var msg = 'Hi there!';
</script>
  

Итак, нам нужно добавить эти кавычки в PHP:

 $myValue = 'Hi there!';
echo <<<JS001
<script type="text/javascript">
var msg = '{$myValue}';
</script>
JS001;
  

В качестве более общего решения вы можете злоупотреблять тем фактом, что строки JSON являются допустимыми значениями JS, и использовать json_encode в PHP:

 $myValue = 'Hi there!';
$myValueJson = json_encode($myValue);
echo <<<JS001
<script type="text/javascript">
var msg = {$myValueJson};
</script>
JS001;
  

В данном случае это не имеет значения, но полезно для передачи других типов значений — массивов и null т. Д

Ответ №4:

Для лучшего управления кодом вам, вероятно, следует разделить HTML, PHP и JS-код в разных файлах.

Представьте себе что-то вроде этого :

controller.php

 
$displayName="David";

include 'vue.php';

  

vue.php

 
<html>
...
<body>

<div id="php-data" data-displayName="<?php echo $displayName ?>"></div>

</body>
</html>

  

script.js

 <script>
var msg = document.getElementById('php-data').dataset.displayName // "David";

</script>