From af67883226954114ef4782f81d1b6360d6516ee9 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Scott=20Gonz=C3=A1lez?= Date: Fri, 17 Aug 2012 09:08:07 -0400 Subject: [PATCH] Tabs: Set ajaxOptions in intial $.ajax() call. Fixes #8504 - Ajax in Tabs not passing data in 1.9. beta 1. --- tests/unit/tabs/tabs_deprecated.js | 6 +++- ui/jquery.ui.tabs.js | 51 ++++++++++++++++++------------ 2 files changed, 36 insertions(+), 21 deletions(-) diff --git a/tests/unit/tabs/tabs_deprecated.js b/tests/unit/tabs/tabs_deprecated.js index 35143334836..4a938c078a3 100644 --- a/tests/unit/tabs/tabs_deprecated.js +++ b/tests/unit/tabs/tabs_deprecated.js @@ -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(); diff --git a/ui/jquery.ui.tabs.js b/ui/jquery.ui.tabs.js index b31ce364a3f..524f4178e24 100644 --- a/ui/jquery.ui.tabs.js +++ b/ui/jquery.ui.tabs.js @@ -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 ) {