Как мне взять заполненный JSON и затем ввести его в PHP?

#javascript #php #json

#javascript #php #json

Вопрос:

У меня есть скрипт, который выдает ответ в формате JSON со стороннего веб-сайта и отображает его на странице пользователей. Вместо этого я хочу, чтобы скрипт отправлял ответ на страницу PHP, чтобы я мог сохранить его во внутренней части моего веб-сайта. Ниже приведен пример кода, который я использую в настоящее время, который отображает ответ на странице. Я не знаю, как сделать так, чтобы ответ можно было затем использовать в качестве входных данных для формы.

 <form action=here.php method=post>
    <?PHP
$token=$_POST['token'];
echo '<input id="token" type="hidden" name="token" value=' . $token . '>';
?>
        <script>
        function pay() {
            var token = document.getElementById('token').value;
            var paymentData = {
                ssl_txn_auth_token: token,
            };
            var callback = {
                onApproval: function (response) {
                    console.log("Approval Code="   response['ssl_approval_code']);
                    showResult("approval", JSON.stringify(response));
                }
            };
            ConvergeEmbeddedPayment.pay(paymentData, callback);
            return false;
        }

        function showResult(status, msg) {
            document.getElementById('txn_status').innerHTML = "
            <b>"   status   "</b>";
            document.getElementById('txn_response').innerHTML = msg;
        }
    window.onload = pay();
    
        </script>
    </form>

        Transaction Status:
    <div id="txn_status"></div>

        Transaction Response:
    <div id="txn_response"></div>
  

Я хочу, чтобы это были данные, которые отображаются на странице пользователей, где "<div id="txn_status"></div>" и "<div id="txn_response"></div>" , я хочу, чтобы эти данные стали значениями, которые я могу использовать в формах ввода <input type=hidden id=status value=<div id="txn_status"></div> /> и <input type=hidden id=response value=<div id="txn_response"></div> /> но, конечно, я не хочу, чтобы значениями был код, я хочу, чтобы они были данными, которые создаются скриптом при загрузке страницы

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

1. Примечание сбоку: Вы должны обернуть это ' . $token . ' в htmlspecialchars() , чтобы предотвратить некоторые векторы атаки xss.

2. Если я хорошо понимаю, вы можете использовать код JavaScript для добавления динамических скрытых полей в форму, как представлено здесь: jsfiddle.net/s55snxtn Это решение вашей проблемы?

3. Переменная $token генерируется моим собственным скриптом. Должен ли я беспокоиться о векторах атаки?

Ответ №1:

Просто поместите JSON в значение скрытого ввода в функции, которая отображает ответ.

         function showResult(status, msg) {
            document.getElementById('txn_status').innerHTML = "<b>"   status   "</b>";
            document.getElementById('txn_response').innerHTML = msg;
            document.getElementById('response').value = msg;
            document.getElementById('status').value = status;
        }
  

Еще одна проблема с вашим кодом:

 window.onload = pay();
  

должно быть

 window.onload = pay;
  

Значением onXXX свойства должна быть функция, вызываемая при возникновении события, ваш код вызывает функцию во время назначения.

Полностью исправленный код:

 <script>
function pay() {
    var token = document.getElementById('token').value;
    var paymentData = {
        ssl_txn_auth_token: token,
    };
    var callback = {
        onApproval: function (response) {
            console.log("Approval Code="   response['ssl_approval_code']);
            showResult("approval", JSON.stringify(response));
        }
    };
    ConvergeEmbeddedPayment.pay(paymentData, callback);
    return false;
}

function showResult(status, msg) {
    document.getElementById('txn_status').innerHTML = "<b>"   status   "</b>";
    document.getElementById('txn_response').innerHTML = msg;
    document.getElementById('response').value = msg;
    document.getElementById('status').value = status;
}
window.onload = pay();

</script>
  

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

1. Итак, это не работает. При последующем просмотре выходных данных он содержит только текст кода, он не показывает ответ, который должен выдавать код

2. Я не понимаю, что вы имеете в виду под этим. Очевидно, что во входных значениях должен быть тот же текст, что и в содержимом DIV.

3. Мой ответ заключался в том, что вы должны просто заменить свое определение showResult моим, оставив все остальное без изменений. Итак, если старый код работал над заполнением DIV, новый код должен заполнить DIV и скрытые входные данные.

4. Трудно читать код в комментариях. В чем разница между тем, что вы написали, и тем, что я написал в своем ответе?

5. Вы не помещаете определения функций внутри <input> элементов. Функция переходит в <script> блок, где она у вас уже есть.[