#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>
блок, где она у вас уже есть.[