2014-02-05 3 views
0

Посылаю сериализованную форму с $ .post в 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 У меня есть строка параметров типа get как $ _POST [' data '] -.- Что я делаю неправильно?

ответ

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

формат $ .post как это:

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

так что ваш первый параметр URL правильный, второй представляет собой данные. поэтому вы получаете $ _POST ['data'] и $ _POST ['action'] в качестве пост-параметров, так как вы отправляете два параметра параметров URL и данные. вы могли бы сделать, как это и отправить форму непосредственно как данные:

$.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 ['action']'. –

+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() {}); '. –

Смежные вопросы