Make sure that #... are trimmed from Ajax request URLs. Fixes #4987.
authorJohn Resig <jeresig@gmail.com>
Wed, 22 Sep 2010 16:52:44 +0000 (12:52 -0400)
committerJohn Resig <jeresig@gmail.com>
Wed, 22 Sep 2010 16:52:44 +0000 (12:52 -0400)
src/ajax.js
test/unit/ajax.js

index cc87133..97d4039 100644 (file)
@@ -10,6 +10,7 @@ var jsc = jQuery.now(),
        rts = /([?&])_=[^&]*(&?)/,
        rurl = /^(\w+:)?\/\/([^\/?#]+)/,
        r20 = /%20/g,
+       rhash = /#[^#]*$/,
 
        // Keep a copy of the old load method
        _load = jQuery.fn.load;
@@ -205,6 +206,7 @@ jQuery.extend({
                var s = jQuery.extend(true, {}, jQuery.ajaxSettings, origSettings),
                        jsonp, status, data, type = s.type.toUpperCase();
 
+               s.url = s.url.replace( rhash, "" );
                s.context = origSettings && origSettings.context || s;
 
                // convert data if not already a string
index 7f3f39a..b7eb57d 100644 (file)
@@ -68,6 +68,35 @@ test("jQuery.ajax() - error callbacks", function() {
        });
 });
 
+test(".ajax() - hash", function() {
+       expect(3);
+
+       jQuery.ajax({
+               url: "data/name.html#foo",
+               beforeSend: function( xhr, settings ) {
+                       equals(settings.url, "data/name.html", "Make sure that the URL is trimmed.");
+                       return false;
+               }
+       });
+
+       jQuery.ajax({
+               url: "data/name.html?abc#foo",
+               beforeSend: function( xhr, settings ) {
+                       equals(settings.url, "data/name.html?abc", "Make sure that the URL is trimmed.");
+                       return false;
+               }
+       });
+
+       jQuery.ajax({
+               url: "data/name.html?abc#foo",
+               data: { "test": 123 },
+               beforeSend: function( xhr, settings ) {
+                       equals(settings.url, "data/name.html?abc&test=123", "Make sure that the URL is trimmed.");
+                       return false;
+               }
+       });
+});
+
 test(".ajax() - 304", function() {
        expect( 1 );
        stop();