通过ajax发送后如何访问另一个页面中的数组

时间:2019-04-14 21:01:42

标签: javascript php jquery ajax

我有一个数组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));

2 个答案:

答案 0 :(得分:2)

就像@RamRaider一样,您正在向sheet.php发出两个请求。第一个是“无提示” POST请求,第二个是在成功完成第一个POST请求之后的GET请求。

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();

答案 1 :(得分:0)

http.send('mnu='+JSON.stringify(student));更改为http.send(JSON.stringify(student));

然后在您的sheet.php中使用json_decode($_POST)来获取您的 POST 数据