Javascript-форум (https://javascript.ru/forum/)
-   Элементы интерфейса (https://javascript.ru/forum/dom-window/)
-   -   json javascript to php (https://javascript.ru/forum/dom-window/62501-json-javascript-php.html)

imedia 13.04.2016 18:07

json javascript to php
 
Я хочу передать массив в файл обработчик который в свою очередь будет отправлять почту
в php я получаю этот массив
$products=$_SESSION['cart']->get_products();

function ajax_post(){
    // Create our XMLHttpRequest object
    var hr = new XMLHttpRequest();
    // Create some variables we need to send to our PHP file
    var url = "/server/mail.php";
	var fn = <?php echo json_encode($products);?>;
    var ln = document.getElementById("mymail").value ;
    var vars = "firstarray="+fn+"&email="+ln;
    hr.open("POST", url, true);
    // Set content type header information for sending url encoded variables in the request
    hr.setRequestHeader("Content-Type", "application/json;charset=UTF-8");
    // Access the onreadystatechange event for the XMLHttpRequest object
    hr.onreadystatechange = function() {
	    if(hr.readyState == 4 && hr.status == 200) {
		    var return_data = hr.responseText;
			/* document.getElementById("status").innerHTML = return_data; */
	    }
    }
    // Send the data to PHP now... and wait for response to update the status div
    hr.send(fn); // Actually execute the request
    /* document.getElementById("status").innerHTML = "processing..."; */
}

почему я в обработчике не вижу json хотя передаю его, массив есть
принимаю так
print_r($_POST);

laimas 13.04.2016 18:25

А зачем уже имея на сервере список продуктов, загонять их на клиента - <?php echo json_encode($products);?>, чтоб получив его, использовать опять таки сервером? Что нельзя просто отослать подтверждение или еще что-то, и получив $_SESSION['cart'], использовать для почтового сообщения?

imedia 13.04.2016 18:37

дело в том что сессия есть но мне по событию надо с ней произвести действия

imedia 13.04.2016 18:51

array(2) {
  ["firstarray"]=>
  string(15) "[object Object]"
  ["email"]=>
  string(19) "imediasun@gmail.com"
}


тут я получаю вот такой массив но он не реагирует на $json = json_decode($_POST["firstarray"]);

laimas 14.04.2016 01:14

Цитата:

Сообщение от imedia
дело в том что сессия есть но мне по событию надо с ней произвести действия

А запрос пользователя на сохранение или еще чего-то, это что не событие? Не занимайтесь ерундой, корзина на сервере, любой запрос над операцией с нею вы же как-то обрабатываете, то есть по некому имени запрашиваемого параметра добавляете/удаляете товары в ней. А что такое оправить почту связанную с корзиной? Ну пусть оформление заказа, пришел в этом случае от пользователя параметр с именем например sale - получили содержимое корзины, оформили заказ, отправили почту. Гонять для этого корзину на клиента, для того чтобы отправить ее почтой с сервера, даже слов не подобать как это назвать можно. :)

imedia 14.04.2016 10:42

Вся суть в том что заказчик захотел по событию закрытия окна браузера слать на мыло сохранение корзины

laimas 14.04.2016 13:44

Цитата:

Сообщение от imedia
суть в том что заказчик захотел по событию закрытия окна браузера

И что, это есть основание гонять товары корзины между сервером и клиентнтом?
При закрытии браузера можно отослать серверу параметр hr.send(closed=1); и знать на сервере, что нужно извлечь товары из корзины и отправить их почтой.

Туда сюда гоняют товары в том случае, если опасаются, что сессия умрет и с ней корзина. Но в этом случае нужно не опасаться, а иметь корзину не сессионную. Корзину на сервер нужно слать только в том случае, если она полностью находится на клиенте, например в локальном хранилище.


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