Использование jQuery .serialize () в массиве ajax для передачи PHP $ _POST в качестве переменных? - PullRequest
8 голосов
/ 19 января 2012

Это код jQuery, который я использую для отправки деталей формы в функцию php:

jQuery(document).ready(function($) {    
    jQuery('.submit').click(function(){
        var str = $("#ajaxForms").serialize();
        var data = {
            action: 'myajax-submit',
            serialize: str,
            beforeSend: function(){
                alert('Sending...');
            }
        };  
        jQuery.post(MyAjax.ajaxurl, data,  function(response) {
            alert('Got this from the server: ' + response);
        });
        return false;   
    });
});

и это функция php:

function myajax_submit() {
    $whatever = $_POST['serialize'];
    echo $whatever;
    die(); 
}

Все работает,но когда появляется окно предупреждения, текст отображает строку значений из моей HTML-формы #ajaxForms.Я полагаю, что это потому, что функция PHP повторяет $_POST['serialize'].

В моей форме у меня есть поле ввода, например:

<input id="postID" name="postID" value="First Name" type="text" />

, но когда я пытаюсьВыведите переменную $_POST['postID'] в php, она ничего не отображает в окне предупреждения.

Я подумал, отправив данные формы, сериализованные в функцию php, я мог бы использовать переменную $ _POST, связанную с входными данными формы.?

Помощь приветствуется.:)

Ответы [ 2 ]

10 голосов
/ 19 января 2012

Сериализовав входные данные формы с помощью сериализации jQuery, вы создаете строку вроде:

a=1&b=2&c=3&d=4&e=5&postID=10

Чтобы получить postId, вам необходимо десериализовать $ _POST ['serialize'].Для этого вы должны сделать что-то вроде:

parse_str($_POST['serialize'], $whatever);

Теперь на $whatever['postID'] это то, что вы ищете.

Редактировать: Исправление parse_str ():)

7 голосов
/ 19 января 2012

Вы неправильно используете $.post..serialize() возвращает строку.Поэтому, когда вы передаете serialize: str в $.post(), сама форма больше не добавляется, а представляет собой простую строку, содержащую сериализованную форму.

Код ниже верен, используя $.ajax (см. Закомментированные строки).

jQuery('.submit').click(function(){
    var str = $("#ajaxForms").serialize();
    // If you realllly. want a parameter serialize, uncomment the following line
    // str += '&serialize=' + encodeURIComponent(str);
    str += '&action=myajax-submit';
    jQuery.ajax(MyAjax.ajaxurl, {
        method: 'POST',
        data: str,
        success: function(response) {
            alert('Got this from the server: ' + response);
        },
        beforeSend: function(){
            alert('Sending...');
        }
    });
    return false;   
});
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...