In my controller, method A calls method B. It was evident that they were being called twice. I verified this by writing to the output window. Interestingly, it said:
Method A was called.
Method A was called.
Method B was called.
Method B was called.
I would have expected A, B, A, B. Also, despite the double calls, I only received back XHR.statusText once. I know, because that text is added automatically to a table in the browser.
Anyway, the problem related to jquery.form.js. I use it to enable AJAX file uploading.
The documentation says that when initializing the connection of jquery.form.js to your HTML form during $(document).ready(), you can add an option called "url". If you don't, it defaults to the ACTION of your form.
I was relying on the default, and getting the double calls.
The problem went away when I added the url option and removed the ACTION from the form tag.