I've found WP Super Cache to be the culprit. In my case I had a misconfigured WP Super Cache plugin appending an html comment to the end of the JSON data, causing the JSON to be invalid, hence breaking the Ajax and never stopping the spinner.
I created a new thread on the WP Super Cache plugin forum:
wpcache_broken_message on xhr (Ajax) causing issue with Contact Form 7
As a final note to the OP (as this may not be the solution for your situation), make sure all your plugins and theme(s) are using the WP provided jQuery. Deactivate all the plugins other than Contact Form 7 and try a default theme like 2012 or 2013 and see if that fixes your problem. If so, there is more than likely a plugin/theme jQuery conflict.