]> source.dussan.org Git - jquery-ui.git/commitdiff
Tabs: Set ajaxOptions in intial $.ajax() call. Fixes #8504 - Ajax in Tabs not passing...
authorScott González <scott.gonzalez@gmail.com>
Fri, 17 Aug 2012 13:08:07 +0000 (09:08 -0400)
committerScott González <scott.gonzalez@gmail.com>
Fri, 17 Aug 2012 13:08:07 +0000 (09:08 -0400)
tests/unit/tabs/tabs_deprecated.js
ui/jquery.ui.tabs.js

index 35143334836a4dc9368a105a15f19de813ea7792..4a938c078a348044e312bcb9c6bc1ab729076e45 100644 (file)
@@ -25,10 +25,11 @@ test( "panel ids", function() {
 module( "tabs (deprecated): options" );
 
 asyncTest( "ajaxOptions", function() {
-       expect( 1 );
+       expect( 2 );
 
        var element = $( "#tabs2" ).tabs({
                ajaxOptions: {
+                       data: "foo=bar",
                        converters: {
                                "text html": function() {
                                        return "test";
@@ -36,6 +37,9 @@ asyncTest( "ajaxOptions", function() {
                        }
                }
        });
+       element.one( "tabsbeforeload", function( event, ui ) {
+               equal( ui.ajaxSettings.url.replace( /^[^\?]+/, "" ), "?foo=bar", "ajaxOptions.data" );
+       });
        element.one( "tabsload", function( event, ui ) {
                equal( $( ui.panel ).html(), "test" );
                start();
index b31ce364a3f6968bab34e9e3e7aa0614da64bf3c..524f4178e2419445bc5f70b34909b0a2abea9b29 100644 (file)
@@ -792,13 +792,7 @@ $.widget( "ui.tabs", {
                        return;
                }
 
-               this.xhr = $.ajax({
-                       url: anchor.attr( "href" ),
-                       beforeSend: function( jqXHR, settings ) {
-                               return that._trigger( "beforeLoad", event,
-                                       $.extend( { jqXHR : jqXHR, ajaxSettings: settings }, eventData ) );
-                       }
-               });
+               this.xhr = $.ajax( this._ajaxSettings( anchor, event, eventData ) );
 
                // support: jQuery <1.8
                // jQuery <1.8 returns false if the request is canceled in beforeSend,
@@ -835,6 +829,18 @@ $.widget( "ui.tabs", {
                }
        },
 
+       // TODO: Remove this function in 1.10 when ajaxOptions is removed
+       _ajaxSettings: function( anchor, event, eventData ) {
+               var that = this;
+               return {
+                       url: anchor.attr( "href" ),
+                       beforeSend: function( jqXHR, settings ) {
+                               return that._trigger( "beforeLoad", event,
+                                       $.extend( { jqXHR : jqXHR, ajaxSettings: settings }, eventData ) );
+                       }
+               };
+       },
+
        _getPanelForTab: function( tab ) {
                var id = $( tab ).attr( "aria-controls" );
                return this.element.find( this._sanitizeSelector( "#" + id ) );
@@ -860,6 +866,7 @@ if ( $.uiBackCompat !== false ) {
                }
        });
 
+       // TODO: Remove _ajaxSettings() method when removing this extension
        // ajaxOptions and cache options
        $.widget( "ui.tabs", $.ui.tabs, {
                options: {
@@ -879,19 +886,6 @@ if ( $.uiBackCompat !== false ) {
                                        return;
                                }
 
-                               $.extend( ui.ajaxSettings, that.options.ajaxOptions, {
-                                       error: function( xhr, s, e ) {
-                                               try {
-                                                       // Passing index avoid a race condition when this method is
-                                                       // called after the user has selected another tab.
-                                                       // Pass the anchor that initiated this request allows
-                                                       // loadError to manipulate the tab content panel via $(a.hash)
-                                                       that.options.ajaxOptions.error( xhr, s, ui.tab.closest( "li" ).index(), ui.tab[ 0 ] );
-                                               }
-                                               catch ( e ) {}
-                                       }
-                               });
-
                                ui.jqXHR.success(function() {
                                        if ( that.options.cache ) {
                                                $.data( ui.tab[ 0 ], "cache.tabs", true );
@@ -900,6 +894,23 @@ if ( $.uiBackCompat !== false ) {
                        }});
                },
 
+               _ajaxSettings: function( anchor, event, ui ) {
+                       var ajaxOptions = this.options.ajaxOptions;
+                       return $.extend( {}, ajaxOptions, {
+                               error: function( xhr, s, e ) {
+                                       try {
+                                               // Passing index avoid a race condition when this method is
+                                               // called after the user has selected another tab.
+                                               // Pass the anchor that initiated this request allows
+                                               // loadError to manipulate the tab content panel via $(a.hash)
+                                               ajaxOptions.error(
+                                                       xhr, s, ui.tab.closest( "li" ).index(), ui.tab[ 0 ] );
+                                       }
+                                       catch ( e ) {}
+                               }
+                       }, this._superApply( arguments ) );
+               },
+
                _setOption: function( key, value ) {
                        // reset cache if switching from cached to not cached
                        if ( key === "cache" && value === false ) {