2011-03-21 2 views
0

Почему это вернется с ошибкой:JQuery Ajax во время отправки формы [ошибка]

jQuery('#the_form').submit(function() { 
    jQuery.ajax({ 
     url: 'stats.php?increment=true', 
     success: function() { 
      alert('Load was performed.'); 
     }, 
     error: function() { 
      alert('Load wasnt performed.'); 
     } 
    }); 

    return true; 
}); 

и это не (возвращение ложным, все остальное такое же):

jQuery('#the_form').submit(function() { 
    jQuery.ajax({ 
     url: 'stats.php?increment=true', 
     success: function() { 
      alert('Load was performed.'); 
     }, 
     error: function() { 
      alert('Load wasnt performed.'); 
     } 
    }); 

    return false; 
}); 

и как я могу назвать этот скрипт перед представлением (внешнему действию)?

ответ

5

Вы подписаны на событие формы .submit. В первом случае вы возвращаете true, что означает, что вы оставляете действие по умолчанию для запуска, которое должно отправить форму на сервер, и перенаправить браузер на stats.php. Поскольку браузер сразу перенаправляет ваш вызов AJAX, возможно, никогда не будет времени для завершения.

Во втором случае вы возвращаете false, что означает, что вы отменяете отправку формы по умолчанию, и вместо этого вы отправляете запрос AJAX, у которого есть достаточно времени для выполнения.

+0

Чтобы изложить это: как мне сделать ajax и THEN submit? –

+0

@ Джеймс Томпсон, весь смысл AJAX в том, что он асинхронный. Если у вас есть ситуация, когда вам нужно дождаться завершения AJAX-звонка, чтобы отправить форму, вам было бы лучше оставить форму как обычно, и делать то, что вы намеревались делать во время вызова AJAX внутри скрипта, который вы используете отправку формы в. –

+0

Форма, которую она публикует, не моя. –

0

Ну, когда вы отправляете форму, если вы вернете истину внутри вашего метода .submit(), это заставит браузер фактически отправить данные, а не просто позвонить AJAX. Поскольку вы используете AJAX, вы должны блокировать отправку формы, потому что вы ожидаете возврата своего вызова AJAX.

+0

Итак, что мне нужно сделать после ajax? Или мне нужно обрабатывать submit как часть этого? –

Смежные вопросы