2014-02-05 84 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(){});'。 –