Это код 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; });