Я использую jQuery для отправки формы в php-файл, простой скрипт для проверки деталей пользователя.
var emailval = $("#email").val(); var invoiceIdval = $("#invoiceId").val(); $.post("includes/verify.php", {invoiceId:invoiceIdval , email:emailval }, function(data) { //stuff here. });
Код PHP:
<?php print_r($_POST); ?>
Я смотрю на ответ в firebug, это пустой массив. Массив должен иметь хотя бы некоторое значение.
Я не могу понять, почему $_POST
не работает в php-файле. Firebug показывает сообщение, содержащее содержимое, отправленное, идентификатор электронной почты и идентификатор счета, только ничего не получено в файле php.
Форма:
<form method="post" action="<?=$_SERVER['PHP_SELF']; ?>" enctype="application/x-www-form-urlencoded">
Кто-нибудь знает, что он делает?
благодаря
нашел это – http://www.bradino.com/php/empty-post-array/
что разумный путь?
$.post()
передает данные базовому $.ajax()
, который по умолчанию устанавливает application/x-www-form-urlencoded
, поэтому я не думаю, что это так.
вы можете попробовать это:
var post = $('#myForm').serialize(); $.post("includes/verify.php", post, function(data) { alert(data); });
вызов serialize()
будет захватывать все текущие данные в form.myForm
.
Я был укушен той же проблемой, и я нашел решение, которое Оуэн не устраивает. Вы сами сериализуете объект, а jQuery должен делать это за вас. В этом случае вы также можете сделать $ .get ().
Я узнал, что в моем случае это было перенаправление сервера из / mydir в / mydir / (с косой чертой), что привело к недействительности массива POST. Запрос отправлен в index.php внутри / mydir
Это было на локальной машине, поэтому я не смог проверить HTTP-трафик. Я бы узнал раньше, если бы сделал это.
application/x-www-form-urlencoded
Вот ваш ответ. Он публикуется, вы просто ищете переменные в массиве $ _POST. Вы действительно хотите $ _REQUEST. В отличие от имени, $ _POST содержит входные переменные, представленные в теле запроса, независимо от метода отправки. $ _GET содержит переменные, проанализированные из строки запроса URL-адреса. Если вам нужны только переменные, используйте глобальный $ _REQUEST.
Если вы ожидаете получать загрузки файлов, то вы хотите создать новый массив, включая содержимое $ _FILES:
$ arguments = $ _REQUEST + $ _FILES;
Я пробовал данную функцию у Оуэна, но также получил пустое предупреждение. Странно, но я заметил, что он выводит строку запроса и возвращает пустое предупреждение. Затем я снова отправлю, и он будет предупреждать о правильных значениях сообщений.
Также были указаны имена полей в html, используя атрибут id (как это было сделано в учебнике jquery, который я читал). Это не позволило сериализовать поля формы. Когда я переключил идентификатор на имя, он решил мою проблему.
В конце концов, я закончил с $ .ajax, так как сделал то, что искал.
У меня был случай, когда я использовал jQuery для отключения всех входов (даже скрытых, которые я хотел), перед использованием jQuery для отправки формы. Я изменил свой jQuery, чтобы отключить входные данные типа «кнопка», и теперь скрытые vars публикуются при отправке формы! Кажется, что если вы отключите скрытый ввод, его значения не будут отправляться с формой!
Изменен:
$('input').attr('disabled',true);
чтобы:
$('input[type=button]').attr('disabled',true);