Как получить доступ к массиву на другой странице после отправки через ajax

У меня есть массив student. Мне нужно передать этот массив на другую php-страницу через POST, а не из GET, потому что он может содержать тысячи символов.

Я пытаюсь открыть новую страницу sheet.php и повторить массив student, я просто проверяю эхо $_POST['mnu'], но он показывает ошибку неопределенный индекс.

var http = null;
if (window.XMLHttpRequest){
    http = new XMLHttpRequest();
}
else{
    http = new ActiveXObject('Microsoft.XMLHTTP');
}
http.open('POST','sheet.php',true);
http.setRequestHeader('Content-type','application/x-www-form-urlencoded');
http.onreadystatechange = function(){
    if (http.readyState==4 && http.status==200){
        window.open('sheet.php','_blank')
    }
}
http.send('mnu='+JSON.stringify(student));

наверняка вышеизложенное эффективно сделает 2 запроса к sheet.php - запрос POST, а затем, когда это удастся, запрос GET?

Professor Abronsius 14.04.2019 23:08

если вы используете jquery, просто используйте это без приведенного выше кода $.post('sheet.php',{mnu:student},function() {window.open('sheet.php','_blank')});

Talal 14.04.2019 23:33

@Talal, я пытался использовать $.post, он перенаправляет, но та же проблема undefined index $_POST['mnu']. Есть ли другой способ получить доступ ?? Я делаю просто if (isset($_POST['mnu'])){echo $_POST['mnu'];}

Hemant 14.04.2019 23:42

чувак, в запросе ajax будут опубликованы данные после успеха запроса, который он откроет sheet.php, и на этот раз данные не опубликованы

Talal 14.04.2019 23:46
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
В JavaScript одним из самых запутанных понятий является поведение ключевого слова "this" в стрелочной и обычной функциях.
Концепция локализации и ее применение в приложениях React ⚡️
Концепция локализации и ее применение в приложениях React ⚡️
Локализация - это процесс адаптации приложения к различным языкам и культурным требованиям. Это позволяет пользователям получить опыт, соответствующий...
Улучшение производительности загрузки с помощью Google Tag Manager и атрибута Defer
Улучшение производительности загрузки с помощью Google Tag Manager и атрибута Defer
В настоящее время производительность загрузки веб-сайта имеет решающее значение не только для удобства пользователей, но и для ранжирования в...
Безумие обратных вызовов в javascript [JS]
Безумие обратных вызовов в javascript [JS]
Здравствуйте! Юный падаван 🚀. Присоединяйся ко мне, чтобы разобраться в одной из самых запутанных концепций, когда вы начинаете изучать мир...
Система управления парковками с использованием HTML, CSS и JavaScript
Система управления парковками с использованием HTML, CSS и JavaScript
Веб-сайт по управлению парковками был создан с использованием HTML, CSS и JavaScript. Это простой сайт, ничего вычурного. Основная цель -...
JavaScript Вопросы с множественным выбором и ответы
JavaScript Вопросы с множественным выбором и ответы
Если вы ищете платформу, которая предоставляет вам бесплатный тест JavaScript MCQ (Multiple Choice Questions With Answers) для оценки ваших знаний,...
0
4
215
2
Перейти к ответу Данный вопрос помечен как решенный

Ответы 2

Изменить http.send('mnu='+JSON.stringify(student)); на http.send(JSON.stringify(student));

А затем в sheet.php используйте json_decode($_POST) для получения данных СООБЩЕНИЕ.

что decode в файле php ??, json_decode() ожидает 1 параметр, а не student массив

Hemant 14.04.2019 23:27
http.send(JSON.stringify(student)); означает, что вы превращаете свой объект JSON в строку. После публикации на странице sheet.php вам нужно превратить его обратно в объект, чтобы вы могли использовать что-то вроде $student = json_decode($_POST). Тогда вы сможете получить доступ к своему student напрямую как к объекту (например, $student->name)
ness 14.04.2019 23:32
Ответ принят как подходящий

Как прокомментировал @RamRaider .. вы делаете два запроса к sheet.php. Первый — это «тихий» запрос POST, а второй — запрос GET после успешного завершения первого запроса POST.

Request count

Второй запрос не будет использовать полезную нагрузку первого.

Если я правильно понимаю, приведенный ниже код должен делать то, что вы хотите...

// Create a form element
// <form action = "sheet.php" method = "post"></form>
var tempForm = document.createElement('form');
tempForm.setAttribute('action', 'sheet.php');
tempForm.setAttribute('method', 'POST');
tempForm.setAttribute('target', '_blank'); // Open in new tab

// Create an input field
// <input name = "mnu" value = "...">
var tempInput = document.createElement('input');
tempInput.setAttribute('name', 'mnu');
tempInput.setAttribute('value', JSON.stringify(student)); // Set field value

// Add the input to the form
tempForm.appendChild(tempInput);


// Add the form to the body in order to post
document.body.appendChild(tempForm);

// Submit the form
tempForm.submit();

// Remove the form
document.body.removeChild(tempForm);

И если вы используете jQuery, вы можете упростить приведенный выше код.

$('<form>', {
    action: 'sheet.php',
    method: 'POST',
    target: '_blank',
    html: $('<input>', {
        name: 'mnu',
        value: JSON.stringify(student)
    }).prop('outerHTML')
}).appendTo($('body')).submit().remove();

Другие вопросы по теме