views:

4806

answers:

5

I have a simple list of records in an HTML table with a delete link for each row. The delete link shoots off an AJAX post request to a fixed url that looks like: "/delete/record/5"

The AJAX request is created using jquery's .ajax() call with a POST message when running on a server that uses https. This call fails in Firefox 3 on OSX/Windows architectures. It works on all other browsers I've tested (OSX/Windows: Chrome, Safari, IE7.)

The requests are coming from an https site and going to the same https site. But I think somewhere during the process the original request starts off as http and there is a redirect attempt on our server to send it from http->https and Firefox rejects that redirect as some type of forgery.

Has anyone had experience doing .ajax() JQuery calls on an https site with Firefox? I notice something odd where if the request has "?var=xxx" arguments in the URL, the request seems to work more often then if it does not have those variables.

+1  A: 

That seems unlikely... not that I'm doubting you. But I would suggest downloading Wireshark and watching your HTTP traffic to see if you can't isolate the problem. You'll be able to compare the request sent by other browsers against the request sent out by FF3 and see what sort of response is coming back. If it is indeed a problem with jQuery not functioning correctly in FF3 you might be able to alter some of the code to work properly.

Spencer Ruport
+1  A: 

You can probably install the Firefox Live Headers extension that will give you access to all the information in your requests/responses. This way you'll be catch any differences.

alexpopescu
A: 

Do you have any plugins or GreaseMonkey scripts installed on your Firefox?

I have never had issues with jQuery AJAX requests on HTTPS. I'd suggest taking a look at what Firebug turns up if you haven't already.

ceejayoz
+6  A: 

Sounds like you're getting an HTTP 411 error.. This error can happen if you're sending a POST request without any data.

To fix this, add an empty object ({}) to the data property to your requests:

$.ajax({ 
    url: url, 
    type: 'POST', 
    data: {}, // <- set empty data 
    success: function(data, textStatus) { 
        // do something 
    } 
}); 
alex2k8
Thanks for the help! This was exactly the problem! I had FF3 and nginx, putting in a blank data{} fixes the problem. I don't need the id in the data{} for delete because the id is already in the url. Spot on advice! Thanks.
MikeN
You are welcome.
alex2k8
A: 

I got $.post to work in FireFox by sending an empty object as the "data" parameter. Notice the empty brackets for parameter 2:

$.post(url, {}, function(response){ alert('done'); }, "json");

ctsears