I haven’t totally figured this out yet. I’m probably doing something dumb.
I have a rails application with an action that I’m hitting via an AJAX POST request. This action generates a PDF and saves it on the server, then sends an email using an ActionMailer, then responds with either a success message or an error message.
Everything was working just hunky-dory except in Google Chrome. In Chrome, at first, it looked like the AJAX request wasn’t even being fired because I wasn’t seeing it in the console like I’m used to in Firebug’s console. Eventually I found where it was hiding– in the Net tab :P
There it didn’t look like there were any errors except that in the Status column it said “(canceled)”. WTF?!? I wasn’t canceling it, the rails server said it was handling it and returning the response I was sending just like normal, so what was going on???
By clicking on the request in the Net tab, or by opening chrome://net-internals/ in a new tab and going to the Events tab, I finally noticed this in the response headers:
Content-Transfer-Encoding: binary Content-Type: text/html Content-Disposition: inline; filename="pdf_141.pdf" Content-Length: 5274
The headers from the PDF generation are bleeding out into my AJAX response for some reason!! I’m still not sure why this is happening. Then I think Chrome sees that the actual data doesn’t match the headers and just stops processing.
Once I changed my rails code from:
render :text => "OK"
send_data "OK", :type => "text/plain"
aside: yes, i know i fail REST forever
Then the AJAX request happened as I expected it to, and the headers had Content-type: text/plain. *sigh*.