尝试使用ajax进行表单提交,但$ _POST-array为空

时间:2013-01-28 15:45:01

标签: php javascript jquery ajax

我正在尝试使用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-array是空的。我做错了什么?

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

Edit2:尽管测试阵列没有通过,但仍然困扰我。正如Kevin B指出的那样,post请求应该保存参数a1和a2,但事实并非如此。如果我发现我做错了,我会再次发帖。

3 个答案:

答案 0 :(得分: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;
});

答案 1 :(得分:0)

嗯,请尝试添加

'async': false,

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

答案 2 :(得分:0)

两年后,我发现这仍然相关。必须为 xhr.setRequestHeader("Content-type", "application/x-www-form-urlencoded"); 设置内容标头,在Javascript中,您可以这样设置:

function CheckKorrespondenzAdresse() {
    var korrespondenzadresse1 = Xrm.Page.getAttribute("new_correspondece_adress").getValue(); //get the Koresspondenzadresse value
    var pplz = Xrm.Page.getAttribute("new_address3_postalcode").getValue(); //get the P-PLZ value 
    var port = Xrm.Page.getAttribute("new_address3_city").getValue(); //get the P-Ort value 
    var gplz = Xrm.Page.getAttribute("address2_postalcode").getValue(); //get the G-PLZ value
    var gort = Xrm.Page.getAttribute("address2_city").getValue(); //get the G-Ort value

    if (korrespondenzadresse1 == '100000002' | pplz != null |  port != null) {
        confirm("P Adresse enthält Daten! Korrespondenzadresse wird darum auf Privatadresse geändert!"); //User benachrichtigen, dass Feld Daten enthält
        Xrm.Page.getAttribute("new_correspondece_adress").setValue(100000000); //Korrespondenzadresse auf Privatadresse ändern
    }
    else if (korrespondenzadresse1 == '100000002' | gplz != null | gort != null) {
         confirm("G Adresse enthält Daten! Korrespondenzadresse wird darum auf Geschäftsadresse geändert!"); //User benachrichtigen, dass Feld Daten enthält
         Xrm.Page.getAttribute("new_correspondece_adress").setValue(100000001); //Korrespondenzadresse auf Geschäftsadresse ändern
    }
}