我有一个数组student
。我需要通过POST
而不是GET
通过另一个php页面传递此数组,因为它可以包含数千个字符。
我试图打开新页面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));
答案 0 :(得分:2)
就像@RamRaider一样,您正在向sheet.php
发出两个请求。第一个是“无提示” POST请求,第二个是在成功完成第一个POST请求之后的GET请求。
第二个请求不会共享第一个请求的有效载荷。
如果我在正确的立场下,下面的代码应该可以完成您想要的...
// 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();
答案 1 :(得分:0)
将http.send('mnu='+JSON.stringify(student));
更改为http.send(JSON.stringify(student));
然后在您的sheet.php
中使用json_decode($_POST)
来获取您的 POST 数据