Javascript-форум (https://javascript.ru/forum/)
-   Общие вопросы Javascript (https://javascript.ru/forum/misc/)
-   -   Передача значения из js в php (https://javascript.ru/forum/misc/81186-peredacha-znacheniya-iz-js-v-php.html)

_marisha 16.10.2020 10:36

Передача значения из 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 пустой :-?
Подскажите, пожалуйста, что делаю не так?

laimas 16.10.2020 10:45

Если пустой, то откуда [payment] => https://securepayments..., и почему ответом два массива, первый из которых пустой?

Что-то вы не так обрабатываете на сервере.

_marisha 16.10.2020 10:55

Цитата:

Сообщение от laimas (Сообщение 529853)
Если пустой, то откуда [payment] => https://securepayments

- в том то и дело, что на странице просмотра заказа в 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?

laimas 16.10.2020 11:03

Цитата:

Сообщение от _marisha
Потому что было data: {payment: pay}, а нужно data: {"payment": pay}

Без разницы, свойство объекта вы можете писать и без кавычек, на сервер все равно придет один запрос с одними и теми же данными. На клиенте у вас нет ошибок, а что вы на сервере делаете нам не известно.

И вы не значение JS передаете, просто некое значение, получаете вы его посредством JS, это да.

_marisha 16.10.2020 11:37

Цитата:

Сообщение от laimas
Без разницы, свойство объекта вы можете писать и без кавычек, на сервер все равно придет один запрос с одними и теми же данными

- тем не менее, если сделать с кавычками, то пустой массив в ответе пропадает :)

Цитата:

Сообщение от laimas
И вы не значение JS передаете, просто некое значение, получаете вы его посредством JS, это да.

- верно

Что могу делать не так? В одном файле получаю некое значение посредством JS, передаю в POST. В другом файле просто хочу вывести данное значение, а массив POST пустой :-?

laimas 16.10.2020 11:50

Цитата:

Сообщение от _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>

laimas 16.10.2020 11:59

Два массива вы можете получить только в том случае, если на сервере бардак в коде или ваш код на клиенте по какой-то причине выполняется дважды и ответ вы смотрите в консоли. Но и в этом случае в консоли будет видно, что это ответ на два запроса, а не на один.

_marisha 16.10.2020 12:04

Цитата:

Сообщение от laimas
Покажите код сервера, что-то вы не о том, что должно быть. Сохраните это под любым именем и запустите на сервере. Если при этом на данные где имя свойства в кавычках ответом будет два массива, можете бросить в меня камень.

- охотно верю :thanks:

Удалены лишние строки в коде, после чего результат приходит один :yes:

_marisha 16.10.2020 12:06

Цитата:

Сообщение от laimas
Сохраните это под любым именем и запустите на сервере

- верно понимаю (исходя из предоставленного Вами кода) что на этой же странице должен вывестись POST?

laimas 16.10.2020 12:10

Да, это простой код, отправляющий одно и то же, с разницей только в написании свойства объекта. На сервер оно будет отправлено как параметр запроса (ключ) и без всяких кавычек в любом из случаев! Сервер приняв запрос вернет эти данные.


Часовой пояс GMT +3, время: 22:08.