It seems that there are no error handling facility in the Jquery.Form plugin, which is very frustrating. Even though the documentation says we can use the $.ajax options, I still cannot make use of the 'error' option when the server returns an error, especially the 500 and 400 series. Is it that this plugin cannot handle any error at all from the server or is it a bug, etc?
Can someone please tell me how I can handle errors (400, 500, etc) with this plugin? I need your help... All I want is a simple error handling... Thank you.

@Nick Craver: Thank you for your very informative answer. This is a bit of a shame that the plugin doesn't handle error though. So why did he say that we can use $.ajax options in his doc... Anyways, so do you mean that in the success handler, I can look for i.e. 400 and something with it? Because I tried and do an 'if' statement for a 400 in the success handler, so it can output in firebug using console.log() but nothing happens...
–
ShaozOct 22 '10 at 10:04

@Shaoz - I think your server isn't returning a 400, in your handler do a console.log(response.status) what do you see?
–
Nick Craver♦Oct 22 '10 at 10:07

@Nick Craver: Firebug shows 'undefined'. But on top of 'undefined', it says 'NetworkError: 400 Bad Request' and that's what I wanna catch and do something with.
–
ShaozOct 22 '10 at 10:14

@Shaoz - a 400 will be a bit unpredictable, since it isn't a problem with the response, but the request itself is fubar, in general this just isn't handled well...I suppose you could check for an empty response (or null status) in your success handler as a work-around, not sure of a better approach if the response code isn't being set. Also just curious, have you tried this across various browsers?
–
Nick Craver♦Oct 22 '10 at 10:21

The jQuery Form Plugin does handle errors and the documentation is correct in stating it can use the $.ajax options. However there are two modes the plugin will run in - normal and file upload. The problem you are having is because you are performing a file upload. (You don't say this but you have "#uploadingImg" and "#polygonUploadForm" and, recursive reasoning, you are having this problem.)

This is commonly stated, but you can't upload a file with AJAX. This workaround is to use an iframe. Form submit POSTs a normal HTTP request and loads the server response in the iframe. The plugin grabs the response and voila. Because this happens as a normal HTTP request, the rules and behaviors of $.ajax don't apply (because it isn't being used). The only thing Form plugin can do is treat whatever it gets as a success. In code terms, file uploading will never trigger the 'error' attribute assigned to ajaxForm() or ajaxSubmit(). If you really want to prove this isn't an AJAX request, attach an ajaxComplete() handler to the form (i.e. completely independent of the Form plugin's methods). It won't get triggered either. Or look at Firebug's Net->XHR panel.

So that's that - the upload is not an AJAX request. The best you can do is work within the 'success' or 'complete' callbacks of ajaxForm()/ajaxSubmit(). You are limited without access to the actual HTTP response code, but you can examine the response. If the response is empty or not what you expect, you can actually trigger the 'error' callback by calling xhr.abort(). Instead of doing "if(good response) {yay!} else {oh no!}", calling abort() and triggering 'error' makes the code a little cleaner and more understandable IMHO. Here's a code example:

Just found out that the jquery.form plugin itself doesn't handle server error, because it doesn't have access to response headers due to the way 'file input' tag handles file upload. So I think the W3C needs to review that troublesome tag that not only doesn't let you style it with CSS but also doesn't make server response handling easy.

There must be a way around it though...

Let me know if I said something wrong and let me know your thoughts about this 'file input' tag...