Плагин jQuery Form обрабатывает ошибки, а документация верна, если он может использовать опции $ .ajax . Однако есть два режима работы плагина - обычный и загрузка файлов. Проблема в том, что вы выполняете загрузку файла . (Вы не говорите этого, но у вас есть «#uploadingImg» и «#polygonUploadForm», и, рекурсивные рассуждения, у вас есть эта проблема.)
Обычно это утверждается, но вы не можете загрузить файл с помощью AJAX. Этот обходной путь должен использовать iframe. Форма отправки отправляет обычный запрос HTTP и загружает ответ сервера в iframe. Плагин захватывает ответ и вуаля. Поскольку это происходит как обычный HTTP-запрос, правила и поведение $ .ajax не применяются (потому что он не используется). Единственное, что может сделать плагин Form - это относиться к тому, что он получает, как к успеху. В терминах кода загрузка файла никогда не вызовет атрибут «error», назначенный ajaxForm () или ajaxSubmit (). Если вы действительно хотите доказать, что это не AJAX-запрос, присоедините к форме обработчик ajaxComplete () (т. Е. Полностью независимый от методов плагина Form). Это тоже не сработает. Или посмотрите на панель Firebug Net-> XHR.
Вот и все - загрузка не является AJAX-запросом. Лучшее, что вы можете сделать, - это работать с «успешными» или «полными» обратными вызовами ajaxForm () / ajaxSubmit (). Вы ограничены без доступа к фактическому коду ответа HTTP, но вы можете проверить ответ. Если ответ пуст или не соответствует ожидаемому, вы можете вызвать обратный вызов «error», вызвав xhr.abort()
. Вместо того чтобы делать «if (хороший ответ) {yay!} Else {oh no!}», Вызов abort () и запуск «error» делает код немного чище и понятнее IMHO. Вот пример кода:
$("#uploadForm").ajaxForm({
success: function(response, textStatus, xhr, form) {
console.log("in ajaxForm success");
if (!response.length || response != 'good') {
console.log("bad or empty response");
return xhr.abort();
}
console.log("All good. Do stuff");
},
error: function(xhr, textStatus, errorThrown) {
console.log("in ajaxForm error");
},
complete: function(xhr, textStatus) {
console.log("in ajaxForm complete");
}
});
Плохой ответ напечатает это в журнале консоли:
[jquery.form] state = uninitialized
"NetworkError: 404 NOT FOUND - http://server/fileupload/"
[jquery.form] state = loading
[jquery.form] isXml=false
in ajaxForm success
bad or empty response
[jquery.form] aborting upload... aborted
in ajaxForm error
in ajaxForm complete
in ajaxForm complete
Я не знаю, почему «полный» обратный вызов запускается дважды - кто-нибудь?
И наконец, прочитайте эту ветку , если вы спрашиваете, почему плагин jQuery или Form не может просто читать заголовки HTTP iframe.