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

Это код 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-функция echos $_POST['serialize'] .

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

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

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

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

Помогите оценить. 🙂

Сериализуя входные данные формы с сериализацией 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 () 🙂

Вы неправильно используете $.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; });