#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>