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