2014-02-05 52 views
0

我发送一个序列化形式与$。员额到控制器PHP:.serialize不传递参数正确

$.post('/Controller.php', 
    { 
     action: 'register', 
     data: $('#regForm').serialize()      
    }, 
    function(msg){ 

     if(parseInt(msg.status)==1) 
     { 
      window.location=msg.txt; 
     } 
     else if(parseInt(msg.status)==0) 
     { 
      error(1,msg.txt); 
     } 

     hideshow('loading',0); 
    }, 
    "json"  
); 

现在我希望能够访问由$ _ POST表单域[“字段名'] 但INSTEAD 我在$ _POST ['data']中有一个Get like参数字符串 - - - 我做错了什么?

回答

1

就像你告诉它它发送数据至。 .serialize()创建一个“查询字符串”,您将其添加到$_POST['data']中。

相反,你有什么样的,试试这个:

var formData = $('#regForm').serialize(); 
var extraFields = {action: 'register'}; 

$.post('/Controller.php', $.param(extraFields)+'&'+formData, function(msg){ 
    if(parseInt(msg.status)==1) 
    { 
     window.location=msg.txt; 
    } 
    else if(parseInt(msg.status)==0) 
    { 
     error(1,msg.txt); 
    } 

    hideshow('loading',0); 
}, 'json'); 

现在,你应该能够得到$_POST['action']$_POST['fieldname']

+0

这正是我所需要的。谢谢! – user2942586

+0

不客气:) –

0

的$。员额格式是这样的:

jQuery.post(url [, data ] [, success(data, textStatus, jqXHR) ] [, dataType ]) 

所以你的第一个参数是URL正确,二是数据。这就是为什么你得到$ _POST ['data']和$ _POST ['action']作为后置参数,因为你确实发送了两个url参数'action'和'data'。你可以不喜欢这一点,并直接将表单数据:

$.post('/Controller.php', 
     $('#regForm').serialize(), 
    function(msg){ 

     if(parseInt(msg.status)==1) 
     { 
      window.location=msg.txt; 
     } 
     else if(parseInt(msg.status)==0) 
     { 
      error(1,msg.txt); 
     } 

     hideshow('loading',0); 
    }, 
    "json"  
); 

,那么你会得到你要求什么,$ _POST [“字段名”]

+0

之间的区别,他所需要的'$ _ POST [“行动”]'太超值了。 –

+0

在这种情况下,您的答案更完整。 –

0

确保您表单中的输入字段具有name属性,否则jQuery将不会正确发送数据。其他选项是使用serializeArray。我认为这两个has been discussed here.

$.post('/Controller.php', 
    { 
     action: 'register', 
     data: $('#regForm').serializeArray()      
    }, 
    function(msg){ 
     if(parseInt(msg.status)==1) 
     { 
      window.location=msg.txt; 
     } 
     else if(parseInt(msg.status)==0) 
     { 
      error(1,msg.txt); 
     } 

     hideshow('loading',0); 
    }  
) 
+0

这不会像你期望的那样工作。在PHP中,您将获得'$ _POST ['data'] [0] ['name']'和'$ _POST ['data'] [0] ['value']''。你可能想要做一些事情:'var data = $('#regForm')。serializeArray(); data.push({名称: '动作',值: '注册'}); $ .post('/ Controller.php',data,function(){});'。 –