Форма отправки - PullRequest
       17

Форма отправки

2 голосов
/ 06 сентября 2010

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

Как бы просто это не звучало, я не могу заставить его работать.

Код jquery (1.4.2), который я использую:

$(document).ready(function() {
    $('#subscription').submit( function() {
        var inputdata = $('#subscription').serialize();
        alert(inputdata);
        $.post("process_form.php", inputdata, function(data) {alert(data);} );
    });
});

Firebug просто показывает:

POST process_form - статус: прерван

Другое любопытное наблюдение - обработчик успеха фактически вызывается, но текст responseText не отображается. Мои журналы apache показывают HTTP-сообщение 304 для формы процесса, после чего она показывает другую строку с кодом статуса 200 для формы, как если бы она была перенаправлена ​​туда, нормальное ли это поведение AJAX, я не знаю.

W3C сообщает здесь :

Если источник URL-адреса, передаваемый заголовком Location, совпадает с источником происхождения XMLHttpRequest, и перенаправление не нарушает меры предосторожности бесконечного цикла, прозрачно следуйте перенаправлению, соблюдая правила события запроса того же источника. В противном случае это ошибка сети.

Но я не думаю, что мой запрос нарушает какой-либо из них.

В любом случае, короткая история: я застрял.

Любая помощь будет принята с благодарностью, и, конечно же, я буду рад предоставить любую дополнительную информацию.

Большое спасибо за ваше время.
Всего наилучшего,
-G

Ответы [ 4 ]

3 голосов
/ 06 сентября 2010

Попробуйте вернуть false в конце вашего обработчика отправки.Я не уверен в точной последовательности происходящих событий, но если вы не вернете false, вы не помешаете действию формы по умолчанию.Таким образом, форма будет отправлена ​​обычным способом, и XHR столкнется с ней, вызвав большой взрыв.

1 голос
/ 06 сентября 2010

Дамм, избили до ответа!

Причина, по которой вы получили прерванное сообщение «process_form.php» в Firebug, была связана с тем, что ваша страница обновлялась раньше, чем «process_form.php» мог ответить на оригинал.запрос, следовательно, он был прерван!Если в операторе FORM нет никаких действий, страница предполагает обновление.

Для моих копеек я стараюсь избегать использования jQuery для обработчиков событий, таких как POST и GET, поскольку обычно страница затем пытается обновить (поскольку в операторе формы не было объявлено никаких действий).

Я использую следующий код для клиентской части, при этом PHP возвращает форматированный XML-документ.

<body>
 <form id="subscription">
  <input id="1" value="1">
  <input id="2" value="2">
  <input id="3" value="3">
  <input id="4" value="4">
  <input type="button" value="SUBMIT" onclick="submitForm()">
 </form>
 <script type="text/javascript"> 

  $(document).ready(function() {

  });

  function submitForm() {
   $.post("./process_form.php", $('#subscription').serialize(),
    function(xml) {
     alert($("SUCCESS",xml).text());
   }, "xml");
  };
 </script>
</body>

PHP на стороне сервера:

<?php
 header("Expires: Mon, 26 Jul 1997 05:00:00 GMT" );
 header("Last-Modified: " . gmdate( "D, d M Y H:i:s" ) . "GMT" );
 header("Cache-Control: no-cache, must-revalidate" );
 header("Pragma: no-cache" );
 header("Content-Type: text/xml; charset=utf-8");

 $XML = '<?xml version="1.0"?>';
 $XML .= "<ROOT>";
 $XML .= "<SUCCESS>1</SUCCESS>";
 $XML .= "</ROOT>";

 echo $XML;
?>

Это позволяет легко выполнять проверку на стороне сервера и легко возвращать подтвержденный ответ.(Например: проверка по базе данных, возврат с SUCCESS = 0 и причина, по которой REASON = Нет в базе данных.)

1 голос
/ 06 сентября 2010

Согласно jQuery-документам , jQuery.post следует называть так:

$.post("process_form.php", inputdata, function(data) {
    alert(data);
});

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

$('#subscription').submit(function(event) {
    event.preventDefault();
    // additional code
});
1 голос
/ 06 сентября 2010

Кратко попробуйте удалить фигурные скобки из функции $ .post ().

[править]

$.post("process_form.php", inputdata, function(data) {alert(data);});
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...