Вот мой тестовый пример. Если форма размещена, отправляется 500 ошибок. Если нет, то форма отправляется.
Если тег ввода файла закомментирован, вызывается обработчик ошибок. Если присутствует тег ввода файла, обработчик ошибок не вызывается. Я думаю, что это может быть связано с тем, что jQuery должен использовать iframe для обработки загрузки, а iframes , похоже, не отвечает на обработчик ошибок .
Edit:
Если я добавлю iframe: true
к опциям, переданным в ajaxSubmit
, чтобы принудительно использовать iframe, дело, не относящееся к загрузке файлов, также перестанет работать, поэтому оно определенно связано с iframe.
Edit2: я использую плагин jQuery Form .
<?php
if($_SERVER['REQUEST_METHOD'] == 'POST') {
header('HTTP/1.1 500 Internal Server Error');
die;
} else {?>
<html><head>
<script type='text/javascript'
src='http://ajax.googleapis.com/ajax/libs/jquery/1.4.2/jquery.min.js?ver=2.9.2'></script>
<script type='text/javascript'
src='http://github.com/malsup/form/raw/master/jquery.form.js?v2.43'></script>
<script type="text/javascript">
jQuery(document).ready(function() {
jQuery('a').click(function() {jQuery('form').ajaxSubmit({error: function(){alert('error handler called');}})});
});
</script>
</head><body>
<form method="POST">
<input type="text" name="mytext" />
<input type="file" name="myfile" /><!-- comment this element out -->
<input type="hidden" name="blah" value="blah" />
<a>submit</a>
</form>
</body></html>
<?php }
Есть ли способ заставить обработчик ошибок вызываться в обеих ситуациях?