Google Chrome AJAX POST request: net_error = -100 (CONNECTION_CLOSED)

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"

to:

    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*.

This entry was posted in Google Chrome, Ruby on Rails. Bookmark the permalink.

Leave a Reply

Your email address will not be published. Required fields are marked *

*

You may use these HTML tags and attributes: <a href="" title=""> <abbr title=""> <acronym title=""> <b> <blockquote cite=""> <cite> <code> <del datetime=""> <em> <i> <q cite=""> <strike> <strong>