Javascript-форум (https://javascript.ru/forum/)
-   Общие вопросы Javascript (https://javascript.ru/forum/misc/)
-   -   редирект со страницы js (захватив данные) на страницу php c приемом туда данные (https://javascript.ru/forum/misc/77601-redirekt-so-stranicy-js-zakhvativ-dannye-na-stranicu-php-c-priemom-tuda-dannye.html)

jobananada 26.05.2019 12:40

я разные варианты пробовал ни один несработал

Malleys 26.05.2019 13:27

Вот файл data.html
<!DOCTYPE html>
<html lang="en">

<head>
	<meta charset="UTF-8">
</head>

<body>
	<form action="data.php" method="post" onsubmit="return submitHandler(this);">
		<input type="text" name="name" placeholder="Имя">
		<input type="number" name="age" placeholder="Возраст">
		<button>Оправить</button>
		
		<output></output>
	</form>
	<script>
	
	function submitHandler(form) {
		var dataToSend = {};
		
		for(const [key, value] of new FormData(form)) {
			dataToSend[key] = value;
		}
		
		fetch(form.action, {
			method: form.method,
			body: JSON.stringify(dataToSend)
		})
		.then(function(response) { return response.json(); })
		.then(function(data) {
			form.querySelector("output").textContent = `
				Получено от сервера:
				Имя:     ${data.name},
				возраст: ${data.age}
			`;
		})
		.catch(function(data) {
			form.querySelector("output").textContent = `
				Нет ответа от сервера!
			`;
		})
		;
		
		return false;
	}

	</script>
</body>

</html>


Вот файл data.php
<?php

$str = file_get_contents('php://input');
$data = json_decode($str);

header('Content-Type: application/json; charset=utf-8');
echo json_encode($data);


поместите их в одну папку, которая доступна публично на вашем сервере, который работает с PHP. Откройте файл data.html с сервера (если у вас папка публично доступна по адресу https://example.com/, то это будет https://example.com/data.html)

Заполните форму, отправьте, ответ от сервера появится рядом! Исследуйте код!

UPD Ваше лукошко что-то не пингуется, что бы это значило?

Код:

~/Desktop/img is 📦 v1.0.0 via ⬢ v10.15.3 via 🐘 v7.0.33 took 27m 18s
➜ ping korzinka.byethost9.com   
PING korzinka.byethost9.com (185.27.134.139) 56(84) bytes of data.

А такое...
Код:

~/Desktop/img is 📦 v1.0.0 via ⬢ v10.15.3 via 🐘 v7.0.33
➜ tracepath korzinka.byethost9.com

завершается так...
Код:

11:  ae-3-3.bear1.Manchesteruk2.Level3.net              109.038ms asymm 12
12:  no reply
13:  no reply
14:  no reply
15:  no reply
16:  WILDCARD-UK.bear1.Manchesteruk2.Level3.net          108.867ms !H
    Resume: pmtu 1500


jobananada 26.05.2019 13:40

спасибо попробую

jobananada 26.05.2019 15:38

а в функцию form - параметр как передать саму форму?

jobananada 26.05.2019 15:38

по id?

jobananada 26.05.2019 15:46

запутано все мне оно неподойдет мне нужно просто данные принять и все

jobananada 26.05.2019 15:51

эта функция уже работает с этой формой или нужно в нее передать как то форму?

jobananada 26.05.2019 15:52

а вижу работает тогда как сделать редирект на нужную страницу в таком случае?

jobananada 26.05.2019 15:52

при нажатии на баттон

jobananada 26.05.2019 16:13

let oplata = document.getElementById('oplata');
oplata.setAttribute('value', 'Оплатить: ' + sum + ' грн.');


document.getElementById('oplata1').innerHTML = '<input type="button" id="oplata" name="buy" value="" onClick="location.href=\'liqpay/liqpay.php\'">';

$("#customer-data").val(obshiyMassive);

выше файл shop.js

ниже index.php вставил код с файла data.html
	
						<form action="liqpay/liqpay.php" method="post" onsubmit="return submitHandler(this);">
							<div>ФИО: <input type="text" id="customer-name"></div>
							<div>Телефон: <input type="text" id="customer-phone"></div>
							<div>E-mail: <input type="text" id="customer-email"></div>
							<div id="otdel">Отделение новой почты: <input type="text" id="customer-dostavka"></div>
							<input type="hidden" name="name" value="" id="customer-data" ></div>
							<div id="oplata1">
							<hr>
						</form>
						<script>
						
						function submitHandler(form) {
							var dataToSend = {};
							
							for(const [key, value] of new FormData(form)) {
								dataToSend[key] = value;
							}
							
							fetch(form.action, {
								method: form.method,
								body: JSON.stringify(dataToSend)
							})
							.then(function(response) { return response.json(); })
							.then(function(data) {
								form.querySelector("output").textContent = `
									Получено от сервера:
									ФИО:     ${data.customer-name},
									Телефон:     ${data.customer-phone},
									E-mail:     ${data.customer-email},
									Отделение новой почты:     ${data.customer-dostavka},
									Данные: ${data.customer-data}
								`;
							})
							.catch(function(data) {
								form.querySelector("output").textContent = `
									Нет ответа от сервера!
								`;
							})
							;
							
							return false;
						}


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