16.10.2020, 10:36
|
Профессор
|
|
Регистрация: 18.05.2018
Сообщений: 170
|
|
Передача значения из js в php
Доброго времени суток!
Необходимо из js передать полученное значение в файл php.
Делаю так (страница просмотра заказа\bitrix\templates\test.ru-new\components\bitrix\sale.personal.order.detail\s hop\template.php):
let pay = document.querySelector('form[method=get]').action;
$(document).ready(function () {
$.ajax({
url: "/pay.php",
type: "POST",
data: {payment: pay},
success: function (data) {
alert (data);
},
error: function(){
alert ("No PHP script: ");
}
});
});
На данной странице при обновлении выводится alert c содержимым:
<pre>Array
(
)
</pre><pre>Array
(
[payment] => https://securepayments.sberbank.ru/payment/merchants/sbersafe_cardholder/payment_ru.html?mdOrder=111111)
</pre>
На странице /pay.php $_POST пустой
Подскажите, пожалуйста, что делаю не так?
|
|
16.10.2020, 10:45
|
Профессор
|
|
Регистрация: 14.01.2015
Сообщений: 12,990
|
|
Если пустой, то откуда [payment] => https://securepayments..., и почему ответом два массива, первый из которых пустой?
Что-то вы не так обрабатываете на сервере.
|
|
16.10.2020, 10:55
|
Профессор
|
|
Регистрация: 18.05.2018
Сообщений: 170
|
|
- в том то и дело, что на странице просмотра заказа в alert значение выводится, а на странице pay.php $_POST пустой
Сообщение от laimas
|
и почему ответом два массива
|
- с этим удалось разобраться. Потому что было data: {payment: pay}, а нужно data: {"payment": pay}, т.е. из-за ковычек
На данный момент в alert на странице заказа выводится следующее:
<pre>Array
(
[payment] => https://securepayments.sberbank.ru/payment/merchants/sbersafe_cardholder/payment_ru.html?mdOrder=111111
)
</pre>
Сообщение от laimas
|
Что-то вы не так обрабатываете на сервере.
|
- а вот что именно, не могу сообразить.
laimas, в файле (где получаю значение в js) возможно ли передать значение в php?
|
|
16.10.2020, 11:03
|
Профессор
|
|
Регистрация: 14.01.2015
Сообщений: 12,990
|
|
Сообщение от _marisha
|
Потому что было data: {payment: pay}, а нужно data: {"payment": pay}
|
Без разницы, свойство объекта вы можете писать и без кавычек, на сервер все равно придет один запрос с одними и теми же данными. На клиенте у вас нет ошибок, а что вы на сервере делаете нам не известно.
И вы не значение JS передаете, просто некое значение, получаете вы его посредством JS, это да.
|
|
16.10.2020, 11:37
|
Профессор
|
|
Регистрация: 18.05.2018
Сообщений: 170
|
|
Сообщение от laimas
|
Без разницы, свойство объекта вы можете писать и без кавычек, на сервер все равно придет один запрос с одними и теми же данными
|
- тем не менее, если сделать с кавычками, то пустой массив в ответе пропадает
Сообщение от laimas
|
И вы не значение JS передаете, просто некое значение, получаете вы его посредством JS, это да.
|
- верно
Что могу делать не так? В одном файле получаю некое значение посредством JS, передаю в POST. В другом файле просто хочу вывести данное значение, а массив POST пустой
|
|
16.10.2020, 11:50
|
Профессор
|
|
Регистрация: 14.01.2015
Сообщений: 12,990
|
|
Сообщение от _marisha
|
тем не менее, если сделать с кавычками, то пустой массив в ответе пропадает
|
Покажите код сервера, что-то вы не о том, что должно быть. Сохраните это под любым именем и запустите на сервере. Если при этом на данные где имя свойства в кавычках ответом будет два массива, можете бросить в меня камень.
<?
if($_POST) {
exit(print_r($_POST, 1));
}
?>
<html>
<head>
<meta charset="utf-8">
<script src="https://ajax.googleapis.com/ajax/libs/jquery/1/jquery.min.js"></script>
<style>
</style>
<script type="text/javascript">
$(function() {
var data = [
{name: 1},
{"name": 1}
];
$('button').click(function() {
$.post(location, data[this.value], function(d) {
alert(d)
})
})
});
</script>
</head>
<body>
<button value="0">GO 1</button>
<button value="1">GO 2</button>
</body>
</html>
|
|
16.10.2020, 11:59
|
Профессор
|
|
Регистрация: 14.01.2015
Сообщений: 12,990
|
|
Два массива вы можете получить только в том случае, если на сервере бардак в коде или ваш код на клиенте по какой-то причине выполняется дважды и ответ вы смотрите в консоли. Но и в этом случае в консоли будет видно, что это ответ на два запроса, а не на один.
|
|
16.10.2020, 12:04
|
Профессор
|
|
Регистрация: 18.05.2018
Сообщений: 170
|
|
Сообщение от laimas
|
Покажите код сервера, что-то вы не о том, что должно быть. Сохраните это под любым именем и запустите на сервере. Если при этом на данные где имя свойства в кавычках ответом будет два массива, можете бросить в меня камень.
|
- охотно верю
Удалены лишние строки в коде, после чего результат приходит один
|
|
16.10.2020, 12:06
|
Профессор
|
|
Регистрация: 18.05.2018
Сообщений: 170
|
|
Сообщение от laimas
|
Сохраните это под любым именем и запустите на сервере
|
- верно понимаю (исходя из предоставленного Вами кода) что на этой же странице должен вывестись POST?
|
|
16.10.2020, 12:10
|
Профессор
|
|
Регистрация: 14.01.2015
Сообщений: 12,990
|
|
Да, это простой код, отправляющий одно и то же, с разницей только в написании свойства объекта. На сервер оно будет отправлено как параметр запроса (ключ) и без всяких кавычек в любом из случаев! Сервер приняв запрос вернет эти данные.
|
|
|
|