Found a couple of relevant things here:
Error Return Values
If the AJAX request fails when the request url is wp-admin/admin-ajax.php, it will return either -1 or 0 depending on the reason it failed. Additionally, if an AJAX request succeeds, it will return a 0.
So I think the "0" we're seeing is due to the AJAX request either failing or succeeding (seems like they would use a different number for those two things, right?).
One reason it may be failing is if it doesn't have an 'action' parameter:
Also on http://codex.wordpress.org/AJAX_in_Plugins it talks about different ways of doing AJAX for those who are logged in (admin, back end) and those who are logged out (viewer-facing, front end). Namely, you need both of these things for it to work for both cases:
WP Stripe only has the first line (in
stripe-functions.php line 105), which might be why it's only working for me when I'm logged in.
(However, I tried adding the second line, and that did not fix things. The "0" did not appear, and the
success: function(response)' function did not even fire inwp-stripe.js` line 58, as it does when the "0" appears.)