JQuery не отправляет данные POST - PullRequest
4 голосов
/ 08 января 2012

Итак, у меня есть действительно простая форма на веб-сайте, полностью основанная на AJAX, для загрузки его страниц. Единственный способ работы этой формы - это использовать магию AJAX, поэтому я решил заняться этим. Я проверил форму, так что я знал, что все работает.

Вот javascript для моей формы. Переменная «полный путь» просто сообщает мне, какая страница загружена в данный момент, все страницы хранятся в локальном каталоге «страниц». Он сериализует форму и отправляет ее на сервер с некоторыми предупреждениями об отладке.

$(document).ready(function() {
$("#regForm").submit(function(event) {
    alert($(this).serialize());
        $.post("pages/" + fullpath, $(this).serialize(), function(data){
            alert(data);                      
        });
        return false;
  });
});

Вот сама форма

<form name="input" id="regForm">
<div class="form-field"><label>Username</label> <input type="text" name="username"/></div>
<div class="form-field"><label>Password</label> <input type="password" name="password"/></div>
<div class="form-field"><label>Confirm Password</label> <input type="password"  name="password2"/></div>
<div class="form-field"><label>Screen Name</label> <input type="text" name="screenname"/></div>
<div class="form-field"><label>Email Address</label> <input type="text" name="address"/></div>
<div class="form-field"><label>Group</label> <select name="usergroup"> 
<option value="0">Superuser</option>
<option value="1">Admin</option>
<option value="2">Moderator</option>
<option value="3">Advmember</option>
<option value="4">Member</option>
<option value="5">Guest</option>
</select> <br />
<label>Submit: </label><input type="submit" value="Submit" />
</div>
</form>

А вот немного PHP, который я положил в начале страницы

print_r($_POST);

Итак, я заполняю форму некоторой фальшивой информацией и нажимаю кнопку отправки Все данные отображаются с

alert($(this).serialize());

И тогда вызов успешен, и я вижу загруженную форму с моим

alert(data);

Но, когда я прошу напечатать массив $ _POST в PHP, это все, что я получаю

Array ()

Итак, jQuery отправляет данные, возвращает страницу назад, но по некоторым причинам переменные POST не проходят. Кто-нибудь хочет протянуть руку?

Ответы [ 6 ]

3 голосов
/ 08 января 2012

Это работает в a Fiddle .

Вы уверены, что fullpath определено глобально?Я не вижу других возможных источников ошибок в вашем коде.

Редактировать : Я вижу фактическую проблему из ваших комментариев: 301 перенаправления неработать через POST :

Если код состояния 301 получен в ответ на запрос, отличный от GET или HEAD, пользовательский агент НЕ ДОЛЖЕН автоматически перенаправлять запрос, если он не подтвержденпользователь, поскольку это может изменить условия, при которых был выдан запрос.

Вам необходимо удалить эту вещь перенаправления, поэтому "pages/" + fullpath напрямую указывает на скрипт PHP.Это также может быть проблемой с конфигурацией вашего сервера.

В случае с Apache вам также может понадобиться взглянуть на этот вопрос SO .

1 голос
/ 08 января 2012

Я собрал ваши фрагменты вместе в html-файл, и это сработало для меня, поэтому проблема должна быть где-то еще в вашем коде.(источник: http://pastebin.com/y4Dfsepv)

0 голосов
/ 10 апреля 2013

вам нужна ваша прямая ссылка. "Pages /" + fullpath.Это проблема, ajax не может распознать вашу ссылку, когда вы публикуете

0 голосов
/ 08 января 2012

** Редактирование, поскольку мы узнали, что сервер 301 перенаправляет код перенаправления **

Смотрите это: https://mdk.fr/blog/post-data-lost-on-301-moved-permanently.html

301 Редирект теряет содержимое POST. Таким образом, jQuery отправляет его вместе, но сервер перенаправляет его в нужное место скрипта без данных POST. Вам нужно выяснить, где находится правильное расположение скрипта, и указать это в вызове jquery, чтобы избежать перенаправления.

0 голосов
/ 08 января 2012

В вашей форме нет method = "POST".

0 голосов
/ 08 января 2012

Вы не указали method = "post" в вашей форме .Если вы не укажете, он становится по умолчанию method = "get".Таким образом, в $ _POST нет значений, вы можете напечатать_R ($ _ GET), и вы увидите значения там.

Измените следующую строку с:

<form name="input" id="regForm">

на:

 <form name="input" id="regForm" method="post">

Обновление:

Обновление ответа согласно комментарию.«Pages /» + fullpath в $ .post может указывать на неправильную страницу, попробуйте предупредить ее и проверить ответ сервера в firebug.Убедитесь, что он указывает на страницу, которую вы хотите, в противном случае используйте полный путь к php-скрипту, как показано ниже:

$.post("http://localhost/pages/" + fullpath, $(this).serialize(), function(data)
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...