jquery $ .post пустой массив - PullRequest
       28

jquery $ .post пустой массив

4 голосов
/ 07 ноября 2008

Я использую 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/

что, разумный путь?

Ответы [ 5 ]

14 голосов
/ 07 ноября 2008

$.post() передает данные в базовый вызов $.ajax(), который по умолчанию устанавливает application/x-www-form-urlencoded, поэтому я не думаю, что это так.

Можете ли вы попробовать это:

var post = $('#myForm').serialize();    

$.post("includes/verify.php", post, function(data) { 
    alert(data);
});

вызов serialize() захватит все текущие данные в form.myForm.

4 голосов
/ 30 апреля 2009

Меня укусила та же проблема, и я считаю, что решение, которое Оуэн дает, не подходит. Вы сами сериализуете объект, в то время как jQuery должен сделать это за вас. В этом случае вы могли бы также сделать $ .get ().

Я обнаружил, что в моем случае это было перенаправление сервера с / mydir на / mydir / (с косой чертой), которое делало массив POST недействительным. Запрос отправлен на index.php в / mydir

Это было на локальной машине, поэтому я не мог проверить HTTP-трафик. Я бы узнал раньше, если бы сделал это.

1 голос
/ 07 ноября 2008
application/x-www-form-urlencoded

Вот твой ответ. Он публикуется, вы просто ищете переменные в массиве $ _POST. То, что вы действительно хотите, это $ _REQUEST. В отличие от имени, $ _POST содержит входные переменные, представленные в теле запроса, независимо от метода отправки. $ _GET содержит переменные, проанализированные в строке запроса URL-адреса. Если вы просто хотите передать переменные, используйте глобальную переменную $ _REQUEST.

Если вы ожидаете получения файловых загрузок, то вы хотите создать новый массив, включающий также содержимое $ _FILES:

$ arguments = $ _REQUEST + $ _FILES;

0 голосов
/ 14 сентября 2011

У меня был случай, когда я использовал jQuery для отключения всех входных данных (даже скрытых, которые я хотел) непосредственно перед использованием jQuery для отправки формы. Я изменил свой jQuery, чтобы отключить только ввод типа «кнопка», и теперь скрытые переменные публикуются при отправке формы! Кажется, что если вы отключили скрытый ввод, его значения не будут опубликованы в форме!

Изменено:

$('input').attr('disabled',true);

до:

$('input[type=button]').attr('disabled',true);
0 голосов
/ 06 апреля 2010

Я попробовал данную функцию от Оуэна, но также получил пустое предупреждение. Странно, но я заметил, что он выведет строку запроса и вернет пустое предупреждение. Тогда я отправлю еще раз, и он сообщит с правильными значениями сообщения.

Также были заданы имена полей в html с использованием атрибута id (как это было сделано в обучающей программе jquery, за которой я следовал). Это не позволило сериализовать поля формы. Когда я переключил идентификатор на имя, это решило мою проблему.

После всего этого я пошел с $ .ajax, поскольку он сделал то, что искал.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...