-1

我正在尝试使用 ajax 将 javascript 数组发送到新页面。关于 SO 有很多问题,在搜索完答案后,我决定像这样使用 Ajax:

var test = {}; 
test['a1'] = 1;  
test['a2'] = 2;

$(document).ready(function(){
$('#form').submit(function(e){

    $.ajax({
        url: 'newpage.php',
        data: {test:test},
        type: 'post',
        success: function(data) {
        alert(data);
        }
    });
    window.open('newpage.php', 'formres','width=800,height=800,resizeable,scrollbars');
    e.preventDefault();
});

});

它的工作原理是新窗口按原样打开 - 但 $_POST 数组为空。我究竟做错了什么?

编辑:我试过 {test:test}, {'test':test} 并且只是测试。我将尝试序列化数据,看看会发生什么。@Louis H:谢谢,没想到。我将尝试使用 Firebug。非常感谢,你们所有人!

Edit2:尽管测试数组没有通过,但我仍然感到困扰。正如 Kevin B 指出的那样,发布请求应该包含参数 a1 和 a2,但事实并非如此。如果我发现我做错了什么,我会再次发布。

4

3 回答 3

0

尝试

$(this).serialize()

为您的数据。这会将表单序列化为正确的发布数据,$_POST 可以使用这些数据

更多信息:http ://api.jquery.com/serialize/

也许你想在弹出窗口中显示这篇文章的结果?那么你应该在回调函数中打开窗口。

$('#form').submit(function(e){

    $.ajax({
        url: 'newpage.php',
        data: $(this).serialize(),
        type: 'post',
        success: function(data) {
            alert(data);
            window.open('newpage.php', 'formres','width=800,height=800,resizeable,scrollbars');
        }
    });

    return false;
});
于 2013-01-28T16:03:00.503 回答
0

嗯,请尝试添加

'async': false,

这用于在打开新窗口之前等待发送 POST。

于 2013-01-28T16:09:18.650 回答
0

两年后,我发现这仍然有意义。必须为 设置内容标题POST,在 Javascript 中,您可以这样做:

 xhr.setRequestHeader("Content-type", "application/x-www-form-urlencoded");
于 2016-02-17T09:34:05.403 回答