For skippywp, it's a combination of 2 problems. The server responding with an error, and the client javascript not handling the error.
Super Cache is putting an html comment with an error message in the JSON response. And the javascript controlling the form in the browser silently fails parsing it, and then never turns off the spinner, nor puts up an error message.
Discovered the problem by looking at the response in the Web Console.