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;
						}

jobananada 26.05.2019 16:20

результат после редиректа всеравно null

jobananada 26.05.2019 17:41

Такое выдало перед редиректом
Resource interpreted as Document but transferred with MIME type application/json
http://korzinka.byethost9.com/liqpay/liqpay.php

jobananada 26.05.2019 17:44

советуют использовать dataType: "jsonp"
ток где указать этот тип в моем случае если конечно в этом проблема

jobananada 26.05.2019 18:03

поменял исчезло предупреждение но данные так и непринял сервер null
<?php

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

header('Content-Type: jsonp; charset=utf-8');
echo json_encode($data);
?>

Malleys 26.05.2019 18:11

Цитата:

Сообщение от jobananada
результат после редиректа всеравно null

А зачем вам редирект, может можно сразу на сервере в скрипте сделать, что надо?

Цитата:

Сообщение от jobananada
поменял исчезло предупреждение...
header('Content-Type: jsonp; charset=utf-8');

Потому что это теперь вообще непонятно, что это такое! Я, однако, не перестаю удивляться вашей изобретательности! Это ошибка, и такого mime-типа не существует!

Цитата:

Сообщение от jobananada
Resource interpreted as Document but transferred with MIME type application/json

Это значит, что на самом деле вы не отправили json, а что-то другое, например, HTML!

jobananada 26.05.2019 18:20

в liqpay.php кнопка находится которая принимает все данные и дальше отправляет клиенат на страницу оплаты компании liqpay

jobananada 26.05.2019 18:22

хотел ее разместить на index.php но оттуда неработала а с liqpay.php работает потому нужно данные туда отправить

Malleys 26.05.2019 18:32

Цитата:

Сообщение от jobananada
liqpay.php кнопка находится которая принимает все данные и дальше отправляет клиенат на страницу оплаты компании liqpay

А это обязательно строить такой редирект: A -> B -> C

Почему нельзя сразу отправить на страницу оплаты компании liqpay, т. е. A -> C

Цитата:

Сообщение от jobananada
с liqpay.php работает потому нужно данные туда отправить

Или же вы можете отправить данные сначала к себе, проверить, и если всё ОК, то разрешить клиенту перейти на страницу оплаты компании liqpay, или открыть её в новой вкладке или в <iframe>

Я не понял вашу чудесную логику взаимоисключающих идей: скрипт и печатать должен, и ещё перенаправлять!

jobananada 26.05.2019 18:41

Я хотел ее размемстить пункте А но пункт а по непонятным мне причинам отказался активировать нажатие по этой кнопке

jobananada 26.05.2019 18:42

на отдельной странице работает чтото в моем коде ей мешает чтоб нековырять пункт А решил передать информацию в пункт Б

Malleys 26.05.2019 18:45

Цитата:

Сообщение от jobananada
Я хотел ее размемстить пункте А но пункт а по непонятным мне причинам отказался активировать нажатие по этой кнопке

Что значит отказался? Может вы что-то не то понаписали? Попробуйте ещё раз!

Цитата:

Сообщение от jobananada
на отдельной странице работает чтото в моем коде ей мешает чтоб нековырять пункт А решил передать информацию в пункт Б

Была одна проблема, стало две! Может, всё-таки доковырять пункт А? И разобраться, что не так?

jobananada 26.05.2019 19:21

ну а логично подумать от чего неработает active?

jobananada 26.05.2019 19:22

у формы

Malleys 26.05.2019 23:05

Цитата:

Сообщение от jobananada
от чего не работает active?

У формы такого нету. Может вы имели в виду action? Адрес, куда отправлять данные формы.

jobananada 31.05.2019 15:55

Все зделал все работает вот результат
http://korzinka.byethost9.com/

Malleys 31.05.2019 16:00

jobananada, я рад, что вы разобрались с формой!

А загрузка пол-гигабайта? Сделайте, чтобы не показывало больше карточек, чем размер экрана!

jobananada 01.06.2019 21:00

я незнаю как загружать часть экрана нужно копатся в инфе

jobananada 01.06.2019 21:03

Вот код который подгружает все карты на главную как сделать чтоб выводилась только видимая часть экрана

function showCategories(data,cool){
        let j = cool;
        //console.log(j);
        let out = '';
        for (let i = 0; i < data.length; i++){
            if (data[i]['gsx$show']['$t'] != 0){
                if(data[i]['gsx$category']['$t'] == j){
					let str = data[i]['gsx$image']['$t'];
					let im = str.split(',')[0];
        			out +=`<div class="goods-category-cart">`;
        			out +=`<div class="goods-category-name">${data[i]['gsx$name']['$t']}</div>`;

			out +=`<div class="goods-img" id="goods-image">
					<img  id="${data[i]['gsx$id']['$t']}" class="square"  src="${im}">
					<span class="text">Кликни фото для просмотра</span>
					</div>`;
			
			out +=`<div class="goods-cost">Цена: ${data[i]['gsx$cost']['$t']}гр</div>`;
			out +=`<div class="goods-pol">Пол: ${data[i]['gsx$pol']['$t']}</div>`;
			out +=`<div class="goods-knopka"><button id="but" name="add-to-cart" data="${data[i]['gsx$id']['$t']}">Купить</button></div>`;
			out +=`</div>`;
                }else if(j == 0){
					let str = data[i]['gsx$image']['$t'];
					let im = str.split(',')[0];
        			out +=`<div class="goods-category-cart">`;
        			out +=`<div class="goods-category-name">${data[i]['gsx$name']['$t']}</div>`;
	
			out +=`<div class="goods-img" id="goods-image">
					<img  id="${data[i]['gsx$id']['$t']}" class="square" src="${im}">
					<span class="text">Кликни фото для просмотра</span>
					</div>`;
			
			out +=`<div class="goods-cost">Цена: ${data[i]['gsx$cost']['$t']}гр</div>`;
			out +=`<div class="goods-pol">Пол: ${data[i]['gsx$pol']['$t']}</div>`;
			out +=`<div class="goods-knopka"><button id="but" name="add-to-cart" data="${data[i]['gsx$id']['$t']}">Купить</button></div>`;
			out +=`</div>`;
				}else if(data[i]['gsx$type']['$t'] == j){
					let str = data[i]['gsx$image']['$t'];
					let im = str.split(',')[0];
        			out +=`<div class="goods-category-cart">`;
        			out +=`<div class="goods-category-name">${data[i]['gsx$name']['$t']}</div>`;

			out +=`<div class="goods-img" id="goods-image">
					<img  id="${data[i]['gsx$id']['$t']}" class="square" src="${im}">
					<span class="text">Кликни фото для просмотра</span>
					</div>`;
			
			
			out +=`<div class="goods-cost">Цена: ${data[i]['gsx$cost']['$t']}гр</div>`;
			out +=`<div class="goods-pol">Пол: ${data[i]['gsx$pol']['$t']}</div>`;
			out +=`<div class="goods-knopka"><button id="but" name="add-to-cart" data="${data[i]['gsx$id']['$t']}">Купить</button></div>`;
			out +=`</div>`;
				}else if(j == 1){
                    
                }
            }
        }
        return out;
    }

jobananada 01.06.2019 21:19

Вот нашол статью какуюто
по этой теме
https://webformyself.com/otlozhennay...ivoj-zagruzki/

jobananada 01.06.2019 21:44

А как этот способ использовать в моем примере?
https://appelsiini.net/projects/lazyload/

jobananada 01.06.2019 22:09

Вот развернутый выведеный кусок кода единичный проход цикла что мне тут изменить

<div class="goods-cart">
<div class="goods-name">Бананка Duo</div>
	<div class="goods-img" id="goods-image">
		<img id="0" class="square" src="некоторое фото">
		<span class="text">Кликни фото для просмотра</span>
	</div>
	<div class="goods-cost">Цена: 189</div>
	<div class="goods-pol">Пол: женский</div>
	<div class="goods-knopka">
		<button id="but" name="add-to-cart" data="0">Купить</button>
	</div>
</div>

jobananada 01.06.2019 22:57

Пробую решать таким способом

<div class="goods-cart">
<div class="goods-name">Бананка Duo</div>
	<div class="goods-img" id="goods-image">
		<img id="0" class="lazy" data-original="некоторое фото">
		<span class="text">Кликни фото для просмотра</span>
	</div>
	<div class="goods-cost">Цена: 189</div>
	<div class="goods-pol">Пол: женский</div>
	<div class="goods-knopka">
		<button id="but" name="add-to-cart" data="0">Купить</button>
	</div>
</div>

$(document).ready(function(){
	$("img.lazy").lazyload({
		effect: "fadeIn"
	});
});

jobananada 01.06.2019 23:02

А ну и без этого никак
<script src="shop/jquery.lazyload.min.js" charset="utf-8"></script>
библиотека лейзилоад и jquery

jobananada 01.06.2019 23:27

Почемуто пустые картинки вроди все сделал правильно

jobananada 01.06.2019 23:33

Все получилось ура)

function showCategories(data,cool){
        let j = cool;
        //console.log(j);
        let out = '';
        for (let i = 0; i < data.length; i++){
            if (data[i]['gsx$show']['$t'] != 0){
                if(data[i]['gsx$category']['$t'] == j){
					let str = data[i]['gsx$image']['$t'];
					let im = str.split(',')[0];
        			out +=`<div class="goods-category-cart">`;
        			out +=`<div class="goods-category-name">${data[i]['gsx$name']['$t']}</div>`;

			out +=`<div class="goods-img" id="goods-image">
					<img  id="${data[i]['gsx$id']['$t']}" class="lazy"  data-original="${im}">
					<span class="text">Кликни фото для просмотра</span>
					</div>`;
			
			out +=`<div class="goods-cost">Цена: ${data[i]['gsx$cost']['$t']}гр</div>`;
			out +=`<div class="goods-pol">Пол: ${data[i]['gsx$pol']['$t']}</div>`;
			out +=`<div class="goods-knopka"><button id="but" name="add-to-cart" data="${data[i]['gsx$id']['$t']}">Купить</button></div>`;
			out +=`</div>`;
                }else if(j == 0){
					let str = data[i]['gsx$image']['$t'];
					let im = str.split(',')[0];
        			out +=`<div class="goods-category-cart">`;
        			out +=`<div class="goods-category-name">${data[i]['gsx$name']['$t']}</div>`;
	
			out +=`<div class="goods-img" id="goods-image">
					<img  id="${data[i]['gsx$id']['$t']}" class="lazy" data-original="${im}">
					<span class="text">Кликни фото для просмотра</span>
					</div>`;
			
			out +=`<div class="goods-cost">Цена: ${data[i]['gsx$cost']['$t']}гр</div>`;
			out +=`<div class="goods-pol">Пол: ${data[i]['gsx$pol']['$t']}</div>`;
			out +=`<div class="goods-knopka"><button id="but" name="add-to-cart" data="${data[i]['gsx$id']['$t']}">Купить</button></div>`;
			out +=`</div>`;
				}else if(data[i]['gsx$type']['$t'] == j){
					let str = data[i]['gsx$image']['$t'];
					let im = str.split(',')[0];
        			out +=`<div class="goods-category-cart">`;
        			out +=`<div class="goods-category-name">${data[i]['gsx$name']['$t']}</div>`;

			out +=`<div class="goods-img" id="goods-image">
					<img  id="${data[i]['gsx$id']['$t']}" class="lazy" data-original="${im}">
					<span class="text">Кликни фото для просмотра</span>
					</div>`;
			
			
			out +=`<div class="goods-cost">Цена: ${data[i]['gsx$cost']['$t']}гр</div>`;
			out +=`<div class="goods-pol">Пол: ${data[i]['gsx$pol']['$t']}</div>`;
			out +=`<div class="goods-knopka"><button id="but" name="add-to-cart" data="${data[i]['gsx$id']['$t']}">Купить</button></div>`;
			out +=`</div>`;
				}else if(j == 1){
                    
                }
            }
        }
		/*ЗАГРУЗКА ФОТОГРАФИЙ ТОВАРОВ ПО МЕРЕ СКРОЛЛИНГА*/
		$(document).ready(function () {
			$("img.lazy").lazyload({
				effect : "fadeIn"
			});
		});
		
        return out;
    }

jobananada 01.06.2019 23:50

Только оно загружает именно всю страницу до скроллига а как сделать чтоб оно загружало только видимую часть и удаляло то что прокрутил или скрывало незнаю и мне ненравится задержка без нее вроди карисивее и быстрее загружались а вот счас когда на каждое фото вешается событие то получается дольше загружается возможно есть альтернатива этому?


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