У меня есть массив 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));
если вы используете jquery, просто используйте это без приведенного выше кода $.post('sheet.php',{mnu:student},function() {window.open('sheet.php','_blank')});
@Talal, я пытался использовать $.post, он перенаправляет, но та же проблема undefined index $_POST['mnu']. Есть ли другой способ получить доступ ?? Я делаю просто if (isset($_POST['mnu'])){echo $_POST['mnu'];}
чувак, в запросе ajax будут опубликованы данные после успеха запроса, который он откроет sheet.php, и на этот раз данные не опубликованы



![Безумие обратных вызовов в javascript [JS]](https://i.imgur.com/WsjO6zJb.png)


Изменить http.send('mnu='+JSON.stringify(student)); на http.send(JSON.stringify(student));
А затем в sheet.php используйте json_decode($_POST) для получения данных СООБЩЕНИЕ.
что decode в файле php ??, json_decode() ожидает 1 параметр, а не student массив
http.send(JSON.stringify(student)); означает, что вы превращаете свой объект JSON в строку. После публикации на странице sheet.php вам нужно превратить его обратно в объект, чтобы вы могли использовать что-то вроде $student = json_decode($_POST). Тогда вы сможете получить доступ к своему student напрямую как к объекту (например, $student->name)
Как прокомментировал @RamRaider .. вы делаете два запроса к sheet.php. Первый — это «тихий» запрос POST, а второй — запрос GET после успешного завершения первого запроса POST.
Второй запрос не будет использовать полезную нагрузку первого.
Если я правильно понимаю, приведенный ниже код должен делать то, что вы хотите...
// 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();
наверняка вышеизложенное эффективно сделает 2 запроса к
sheet.php- запрос POST, а затем, когда это удастся, запрос GET?