С Новым годом! Форум программистов, компьютерный форум, киберфорум
PHP
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.67/3: Рейтинг темы: голосов - 3, средняя оценка - 4.67
1 / 1 / 1
Регистрация: 22.09.2014
Сообщений: 39

Form vs XMLHttpRequest есть разница

17.08.2024, 07:51. Показов 1255. Ответов 5

Студворк — интернет-сервис помощи студентам
Добрый день! Подскажите, такая ситуация. Подключил юкассу к сайту на php.
На хосте есть файл payment.php, который собственно отправляет запрос в юкассу на формирование платежного документа и после этого редиректит пользователя на этот платежный документ.
На сайте я отправляю через form action="payment.php" всё работает чудесно редирект срабатывает.
Но если я форму отправляю через XMLHttpRequest в JS, то платежный документ формируется, а вот редирект ловит CORS.

Служба поддержки юкассы говорит, что принимаются запросы только от серверов. Получается когда я делаю через
JS -> payment.php -> ukassa API конечная точка видит это как от клиента напрямую запрос? Но я думал управление уже серверу передаётся.
А такая связка form -> payment.php -> ukassa API работает на ура.

Есть ли способ через JS, чтобы работало, а не через форму?
0
Лучшие ответы (1)
cpp_developer
Эксперт
20123 / 5690 / 1417
Регистрация: 09.04.2010
Сообщений: 22,546
Блог
17.08.2024, 07:51
Ответы с готовыми решениями:

XmlHttpRequest. multipart/form-data
Доброго дня всем. Отправка файла на сервер с помощью XmlHttpRequest вызвала у меня недоумение. По идее, чтобы серверный код мог...

struts-config.xml <form-bean>.. В чем разница?
в чем разница между &lt;form-bean name='dynaCustomerForm' type='org.apache.struts.action.DynaActionForm'&gt; &lt;form-property...

Есть ли разница? Если есть что это обозначает?
Есть ли разница между if(s &amp;&amp; v &gt; a); или if(s &gt; a &amp;&amp; v &gt; a);

5
1 / 1 / 1
Регистрация: 22.09.2014
Сообщений: 39
17.08.2024, 15:40  [ТС]
Разумеется нужне хедеры и в JS и на сервере в php я указал

Добавлено через 57 минут
Вот index.php

HTML5
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
<!DOCTYPE html>
<html>
<head>
<title>Тест</title>
<meta charset="utf-8">
</head>
<body>
<?php
  //  header('Access-Control-Allow-Origin: *');
?>
 
<a id="send"  href="#" > Отправить</a>
 
<form id="f" action="payment.php" method="POST">
  <button type="submit" >done</button>
</form>
 
<div id="result"></div>
<script src="jquery.min.js?v=1"></script>
<script src="script.js?v=1"></script>
 
</body>
</html>
это функция из JS файла сюда любой адрес сайта если вставить вылезет CORS

JavaScript
1
2
3
4
5
6
7
8
9
function sendData() {
 
  const xhr = new XMLHttpRequest();
   
  xhr.open("POST", "payment.php");
  //xhr.setRequestHeader ('Access-Control-Allow-Origin','*');  
  xhr.send();
 
  }
ну и payment.php

PHP
1
2
3
4
5
6
 <?php
header('Access-Control-Allow-Origin: *');
 
header('Location: ' . $res['confirmation']['confirmation_url'], true, 301);
 
exit();
Тихо тихо я чувствую что уже почти рядом с ответом не обламывайте кайф

Добавлено через 14 минут
В общем решил с читерить. Из PHP возвращаю адрес куда редиректнуть и уже в JS тупо перехожу по этому адресу. Работает хорошо.
Переход из PHP так и не получился, ай лень разбираться по напридумывают корсы потом лекарство надо придумывать горе от ума. Спасибо тому кто дочитал до конца здоровья, счастья тебе!
0
Супер-модератор
Эксперт JSЭксперт HTML/CSSЭксперт PHP
 Аватар для gogolik
3945 / 2052 / 829
Регистрация: 13.03.2010
Сообщений: 6,750
17.08.2024, 19:13
Лучший ответ Сообщение было отмечено gogolik как решение

Решение

Цитата Сообщение от Sergey271 Посмотреть сообщение
Из PHP возвращаю адрес куда редиректнуть и уже в JS тупо перехожу по этому адресу. Работает хорошо.
Ну, вообще, так и нужно делать )))

Когда вы делаете редирект на сервере с помощью PHP, то браузер автоматически перенаправляет пользователя на новый URL. Если новый URL принадлежит другому домену, тогда браузер может заблокировать этот запрос из-за политики CORS.

Когда вы делаете редирект на клиентской стороне с помощью JS, например, через window.location.href, то браузер интерпретирует это как стандартный навигационный переход пользователя. В этом случае CORS не применяется, потому что это уже не запрос из кода, а обычный переход между страницами, как если бы пользователь сам кликнул по ссылке.
1
1 / 1 / 1
Регистрация: 22.09.2014
Сообщений: 39
18.08.2024, 16:04  [ТС]
Да смутил их пример на сайте, ещё и техподдержка говорит принимаем запросы только от серверов, от клиентов ни ни. Но ведь я же типа с сервера отправляю с PHP файла (оно как прокси получается) посмотрел трассировку и на конечную точку к их домену передаётся инфа типа инициатор запроса объект xhr, то есть действительно как будто клиент напрямую отправляет. ХЗ почему проксирование не срабатывает.

Остаётся только один не решённый вопрос, почему через form работает редирект из php файла?
0
377 / 319 / 73
Регистрация: 15.09.2017
Сообщений: 1,436
31.08.2024, 09:56
Цитата Сообщение от Sergey271 Посмотреть сообщение
Остаётся только один не решённый вопрос, почему через form работает редирект из php файла?
А почему не должен?

У вас, как я понял, основная кривизна была в том, что в ответ на AJAX-запрос вы оставляли серверный редирект. Выше уже подтвердили, что в ответ на AJAX-запрос нужно делать примерно так:
Цитата Сообщение от Sergey271 Посмотреть сообщение
Из PHP возвращаю адрес куда редиректнуть и уже в JS тупо перехожу по этому адресу.
Не обязательно прям целиком возвращать адрес. Главное чтобы по ответу JS-код понял, куда выполнять редирект.
0
 Аватар для sad67man
2603 / 1507 / 689
Регистрация: 23.08.2015
Сообщений: 3,814
31.08.2024, 23:28
Sergey271, Когда используете аякс, то переход нужно делать через js. Редирект работает на сам аякс запрос (который уже ловит CORS), и через заголовки не получится заставить браузер перейти на другую страницу в принципе.

Добавлено через 25 минут
Цитата Сообщение от gogolik Посмотреть сообщение
Когда вы делаете редирект на сервере с помощью PHP, то браузер автоматически перенаправляет пользователя на новый URL. Если новый URL принадлежит другому домену, тогда браузер может заблокировать этот запрос из-за политики CORS.
Обычный редирект не блокируется. Политика CORS касается только аякс запросов.
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
raxper
Эксперт
30234 / 6612 / 1498
Регистрация: 28.12.2010
Сообщений: 21,154
Блог
31.08.2024, 23:28
Помогаю со студенческими работами здесь

В чём заключается разница между VSL Form и VSL Forms Application?
В чём заключается разница между VSL Form и VSL Forms Application? Заранее спасибо за ответ)

Form редактор, есть ли он в MS VC++
Добрый день, появился вопрос, при написании программы на С++\CLR, очень удобно в плане создание мордашки для программы, но вот код...

Есть ли разница...
Допустим есть ссылка со страницы каталога http://www.ua.all-biz.info/ на страницу моего сайта. Вариант 1: Эта страница: ...

Есть ли разница?
float f=2.1 float f=2.1F

Есть ли разница?
Смотрите www.gartex.ru PR-3 и второе главная страница-www.gartex.ru PR-0. Так вот: раньше я добавлял в каталоги ссылку №1, а теперь?...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
6
Ответ Создать тему
Новые блоги и статьи
Модель микоризы: классовый агентный подход 3
anaschu 06.01.2026
aa0a7f55b50dd51c5ec569d2d10c54f6/ O1rJuneU_ls https:/ / vkvideo. ru/ video-115721503_456239114
Owen Logic: О недопустимости использования связки «аналоговый ПИД» + RegKZR
ФедосеевПавел 06.01.2026
Owen Logic: О недопустимости использования связки «аналоговый ПИД» + RegKZR ВВЕДЕНИЕ Введу сокращения: аналоговый ПИД — ПИД регулятор с управляющим выходом в виде числа в диапазоне от 0% до. . .
Модель микоризы: классовый агентный подход 2
anaschu 06.01.2026
репозиторий https:/ / github. com/ shumilovas/ fungi ветка по-частям. коммит Create переделка под биомассу. txt вход sc, но sm считается внутри мицелия. кстати, обьем тоже должен там считаться. . . .
Расчёт токов в цепи постоянного тока
igorrr37 05.01.2026
/ * Дана цепь постоянного тока с сопротивлениями и напряжениями. Надо найти токи в ветвях. Программа составляет систему уравнений по 1 и 2 законам Кирхгофа и решает её. Последовательность действий:. . .
Новый CodeBlocs. Версия 25.03
palva 04.01.2026
Оказывается, недавно вышла новая версия CodeBlocks за номером 25. 03. Когда-то давно я возился с только что вышедшей тогда версией 20. 03. С тех пор я давно снёс всё с компьютера и забыл. Теперь. . .
Модель микоризы: классовый агентный подход
anaschu 02.01.2026
Раньше это было два гриба и бактерия. Теперь три гриба, растение. И на уровне агентов добавится между грибами или бактериями взаимодействий. До того я пробовал подход через многомерные массивы,. . .
Советы по крайней бережливости. Внимание, это ОЧЕНЬ длинный пост.
Programma_Boinc 28.12.2025
Советы по крайней бережливости. Внимание, это ОЧЕНЬ длинный пост. Налог на собак: https:/ / **********/ gallery/ V06K53e Финансовый отчет в Excel: https:/ / **********/ gallery/ bKBkQFf Пост отсюда. . .
Кто-нибудь знает, где можно бесплатно получить настольный компьютер или ноутбук? США.
Programma_Boinc 26.12.2025
Нашел на реддите интересную статью под названием Anyone know where to get a free Desktop or Laptop? Ниже её машинный перевод. После долгих разбирательств я наконец-то вернула себе. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru