2006-09-30 16:32:49 +02:00
jQuery . fn . extend ( {
2006-03-22 04:33:07 +01:00
2006-09-30 16:32:49 +02:00
/ * *
* Load HTML from a remote file and inject it into the DOM , only if it ' s
* been modified by the server .
*
* @ example $ ( "#feeds" ) . loadIfModified ( "feeds.html" )
* @ before < div id = "feeds" > < / d i v >
* @ result < div id = "feeds" > < b > 45 < / b > f e e d s f o u n d . < / d i v >
*
* @ name loadIfModified
* @ type jQuery
* @ param String url The URL of the HTML file to load .
* @ param Hash params A set of key / value pairs that will be sent to the server .
* @ param Function callback A function to be executed whenever the data is loaded .
* @ cat AJAX
* /
loadIfModified : function ( url , params , callback ) {
this . load ( url , params , callback , 1 ) ;
} ,
2006-06-19 03:29:54 +02:00
2006-09-30 16:32:49 +02:00
/ * *
* Load HTML from a remote file and inject it into the DOM .
*
* @ example $ ( "#feeds" ) . load ( "feeds.html" )
* @ before < div id = "feeds" > < / d i v >
* @ result < div id = "feeds" > < b > 45 < / b > f e e d s f o u n d . < / d i v >
*
* @ example $ ( "#feeds" ) . load ( "feeds.html" ,
* { test : true } ,
* function ( ) { alert ( "load is done" ) ; }
* ) ;
* @ desc Same as above , but with an additional parameter
* and a callback that is executed when the data was loaded .
*
* @ test stop ( ) ;
* $ ( '#first' ) . load ( "data/name.php" , function ( ) {
* ok ( $ ( '#first' ) . text ( ) == 'ERROR' , 'Check if content was injected into the DOM' ) ;
* start ( ) ;
* } ) ;
*
2006-10-06 16:14:00 +02:00
* @ test stop ( ) ; // check if load can be called with only url
* $ ( '#first' ) . load ( "data/name.php" ) ;
2006-10-09 09:24:46 +02:00
* $ . get ( "data/name.php" , function ( ) {
2006-10-06 16:14:00 +02:00
* ok ( $ ( '#first' ) . text ( ) == 'ERROR' , 'Check if load works without callback' ) ;
* start ( ) ;
2006-10-09 09:24:46 +02:00
* } ) ;
2006-10-06 16:14:00 +02:00
*
2006-10-13 15:57:55 +02:00
* @ test stop ( ) ;
2006-11-07 12:19:44 +01:00
* window . foobar = undefined ;
* window . foo = undefined ;
2006-10-13 15:57:55 +02:00
* var verifyEvaluation = function ( ) {
* ok ( foobar == "bar" , 'Check if script src was evaluated after load' ) ;
2006-11-09 22:16:03 +01:00
* ok ( $ ( '#foo' ) . html ( ) == 'foo' , 'Check if script evaluation has modified DOM' ) ;
* ok ( $ ( '#ap' ) . html ( ) == 'bar' , 'Check if script evaluation has modified DOM' ) ;
2006-10-13 15:57:55 +02:00
* start ( ) ;
* } ;
* $ ( '#first' ) . load ( 'data/test.html' , function ( ) {
* ok ( $ ( '#first' ) . html ( ) . match ( /^html text/ ) , 'Check content after loading html' ) ;
* ok ( foo == "foo" , 'Check if script was evaluated after load' ) ;
* setTimeout ( verifyEvaluation , 600 ) ;
* } ) ;
*
2006-09-30 16:32:49 +02:00
* @ name load
* @ type jQuery
* @ param String url The URL of the HTML file to load .
2006-11-11 13:08:48 +01:00
* @ param Object params A set of key / value pairs that will be sent as data to the server .
* @ param Function callback A function to be executed whenever the data is loaded ( parameters : responseText , status and reponse itself ) .
2006-09-30 16:32:49 +02:00
* @ cat AJAX
* /
load : function ( url , params , callback , ifModified ) {
if ( url . constructor == Function )
return this . bind ( "load" , url ) ;
2006-11-04 22:09:05 +01:00
2006-09-30 16:32:49 +02:00
callback = callback || function ( ) { } ;
2006-11-04 22:09:05 +01:00
2006-09-30 16:32:49 +02:00
// Default to a GET request
var type = "GET" ;
2006-11-04 22:09:05 +01:00
2006-09-30 16:32:49 +02:00
// If the second parameter was provided
if ( params ) {
// If it's a function
if ( params . constructor == Function ) {
// We assume that it's the callback
callback = params ;
params = null ;
2006-11-04 22:09:05 +01:00
2006-09-30 16:32:49 +02:00
// Otherwise, build a param string
} else {
params = jQuery . param ( params ) ;
type = "POST" ;
}
}
2006-11-04 22:09:05 +01:00
2006-09-30 16:32:49 +02:00
var self = this ;
2006-11-04 22:09:05 +01:00
2006-09-30 16:32:49 +02:00
// Request the remote document
2006-11-03 12:30:57 +01:00
jQuery . ajax ( {
url : url ,
type : type ,
data : params ,
ifModified : ifModified ,
complete : function ( res , status ) {
if ( status == "success" || ! ifModified && status == "notmodified" ) {
// Inject the HTML into all the matched elements
self . html ( res . responseText )
// Execute all the scripts inside of the newly-injected HTML
. evalScripts ( )
// Execute callback
2006-11-11 13:08:48 +01:00
. each ( callback , [ res . responseText , status , res ] ) ;
2006-11-03 12:30:57 +01:00
} else
2006-11-11 13:08:48 +01:00
callback . apply ( self , [ res . responseText , status , res ] ) ;
2006-11-03 12:30:57 +01:00
}
} ) ;
2006-09-30 16:32:49 +02:00
return this ;
} ,
2006-05-16 18:18:52 +02:00
2006-09-30 16:32:49 +02:00
/ * *
2006-10-02 18:45:35 +02:00
* Serializes a set of input elements into a string of data .
2006-11-04 22:09:05 +01:00
* This will serialize all given elements . If you need
2006-10-02 18:45:35 +02:00
* serialization similar to the form submit of a browser ,
* you should use the form plugin . This is also true for
* selects with multiple attribute set , only a single option
* is serialized .
2006-09-30 16:32:49 +02:00
*
* @ example $ ( "input[@type=text]" ) . serialize ( ) ;
* @ before < input type = 'text' name = 'name' value = 'John' / >
* < input type = 'text' name = 'location' value = 'Boston' / >
* @ after name = John & location = Boston
* @ desc Serialize a selection of input elements to a string
*
2006-10-02 18:45:35 +02:00
* @ test var data = $ ( ':input' ) . not ( 'button' ) . serialize ( ) ;
* // ignore button, IE takes text content as value, not relevant for this test
* ok ( data == 'action=Test&text2=Test&radio1=on&radio2=on&check=on&=on&hidden=&foo[bar]=&name=name&=foobar&select1=&select2=3&select3=1' , 'Check form serialization as query string' ) ;
2006-09-30 16:32:49 +02:00
*
* @ name serialize
* @ type String
* @ cat AJAX
* /
serialize : function ( ) {
2006-10-06 19:15:33 +02:00
return jQuery . param ( this ) ;
2006-10-13 15:57:55 +02:00
} ,
2006-11-04 22:09:05 +01:00
2006-11-11 12:34:51 +01:00
/ * *
* Evaluate all script tags inside this jQuery . If they have a src attribute ,
* the script is loaded , otherwise it ' s content is evaluated .
*
* @ name evalScripts
* @ type jQuery
* @ private
* @ cat AJAX
* /
2006-10-13 15:57:55 +02:00
evalScripts : function ( ) {
return this . find ( 'script' ) . each ( function ( ) {
if ( this . src )
// for some weird reason, it doesn't work if the callback is ommited
jQuery . getScript ( this . src , function ( ) { } ) ;
else
eval . call ( window , this . text || this . textContent || this . innerHTML || "" ) ;
} ) . end ( ) ;
2006-09-30 16:32:49 +02:00
}
2006-11-04 22:09:05 +01:00
2006-09-30 16:32:49 +02:00
} ) ;
2006-09-08 12:18:46 +02:00
2006-06-19 03:29:54 +02:00
// If IE is used, create a wrapper for the XMLHttpRequest object
2006-08-31 08:30:44 +02:00
if ( jQuery . browser . msie && typeof XMLHttpRequest == "undefined" )
2006-06-19 03:29:54 +02:00
XMLHttpRequest = function ( ) {
return new ActiveXObject (
2006-07-10 05:20:56 +02:00
navigator . userAgent . indexOf ( "MSIE 5" ) >= 0 ?
2006-06-19 03:29:54 +02:00
"Microsoft.XMLHTTP" : "Msxml2.XMLHTTP"
) ;
} ;
2006-06-08 19:31:57 +02:00
2006-06-19 03:29:54 +02:00
// Attach a bunch of functions for handling common AJAX events
2006-09-08 12:18:46 +02:00
/ * *
* Attach a function to be executed whenever an AJAX request begins .
*
* @ example $ ( "#loading" ) . ajaxStart ( function ( ) {
* $ ( this ) . show ( ) ;
* } ) ;
* @ desc Show a loading message whenever an AJAX request starts .
*
* @ name ajaxStart
* @ type jQuery
* @ param Function callback The function to execute .
* @ cat AJAX
* /
2006-11-04 22:09:05 +01:00
2006-09-08 12:18:46 +02:00
/ * *
* Attach a function to be executed whenever all AJAX requests have ended .
*
* @ example $ ( "#loading" ) . ajaxStop ( function ( ) {
* $ ( this ) . hide ( ) ;
* } ) ;
* @ desc Hide a loading message after all the AJAX requests have stopped .
*
* @ name ajaxStop
* @ type jQuery
* @ param Function callback The function to execute .
* @ cat AJAX
* /
2006-11-04 22:09:05 +01:00
2006-09-08 12:18:46 +02:00
/ * *
* Attach a function to be executed whenever an AJAX request completes .
*
* @ example $ ( "#msg" ) . ajaxComplete ( function ( ) {
* $ ( this ) . append ( "<li>Request Complete.</li>" ) ;
* } ) ;
* @ desc Show a message when an AJAX request completes .
*
* @ name ajaxComplete
* @ type jQuery
* @ param Function callback The function to execute .
* @ cat AJAX
* /
2006-11-04 22:09:05 +01:00
2006-09-08 12:18:46 +02:00
/ * *
* Attach a function to be executed whenever an AJAX request completes
* successfully .
*
* @ example $ ( "#msg" ) . ajaxSuccess ( function ( ) {
* $ ( this ) . append ( "<li>Successful Request!</li>" ) ;
* } ) ;
* @ desc Show a message when an AJAX request completes successfully .
*
* @ name ajaxSuccess
* @ type jQuery
* @ param Function callback The function to execute .
* @ cat AJAX
* /
2006-11-04 22:09:05 +01:00
2006-09-08 12:18:46 +02:00
/ * *
* Attach a function to be executed whenever an AJAX request fails .
*
* @ example $ ( "#msg" ) . ajaxError ( function ( ) {
* $ ( this ) . append ( "<li>Error requesting page.</li>" ) ;
* } ) ;
* @ desc Show a message when an AJAX request fails .
*
* @ name ajaxError
* @ type jQuery
* @ param Function callback The function to execute .
* @ cat AJAX
* /
2006-11-04 22:09:05 +01:00
2006-10-01 16:05:10 +02:00
/ * *
* @ test stop ( ) ; var counter = { complete : 0 , success : 0 , error : 0 } ;
* var success = function ( ) { counter . success ++ } ;
* var error = function ( ) { counter . error ++ } ;
* var complete = function ( ) { counter . complete ++ } ;
* $ ( '#foo' ) . ajaxStart ( complete ) . ajaxStop ( complete ) . ajaxComplete ( complete ) . ajaxError ( error ) . ajaxSuccess ( success ) ;
* // start with successful test
* $ . ajax ( { url : "data/name.php" , success : success , error : error , complete : function ( ) {
* ok ( counter . error == 0 , 'Check succesful request' ) ;
* ok ( counter . success == 2 , 'Check succesful request' ) ;
* ok ( counter . complete == 3 , 'Check succesful request' ) ;
* counter . error = 0 ; counter . success = 0 ; counter . complete = 0 ;
* $ . ajaxTimeout ( 500 ) ;
* $ . ajax ( { url : "data/name.php?wait=5" , success : success , error : error , complete : function ( ) {
* ok ( counter . error == 2 , 'Check failed request' ) ;
* ok ( counter . success == 0 , 'Check failed request' ) ;
* ok ( counter . complete == 3 , 'Check failed request' ) ;
2006-10-02 18:45:35 +02:00
* start ( ) ;
* } } ) ;
* } } ) ;
2006-11-04 22:09:05 +01:00
2006-10-02 18:45:35 +02:00
* @ test stop ( ) ; var counter = { complete : 0 , success : 0 , error : 0 } ;
* counter . error = 0 ; counter . success = 0 ; counter . complete = 0 ;
* var success = function ( ) { counter . success ++ } ;
* var error = function ( ) { counter . error ++ } ;
* $ . ajaxTimeout ( 0 ) ;
* $ . ajax ( { url : "data/name.php" , global : false , success : success , error : error , complete : function ( ) {
* ok ( counter . error == 0 , 'Check sucesful request without globals' ) ;
* ok ( counter . success == 1 , 'Check sucesful request without globals' ) ;
* ok ( counter . complete == 0 , 'Check sucesful request without globals' ) ;
* counter . error = 0 ; counter . success = 0 ; counter . complete = 0 ;
* $ . ajaxTimeout ( 500 ) ;
* $ . ajax ( { url : "data/name.php?wait=5" , global : false , success : success , error : error , complete : function ( ) {
* ok ( counter . error == 1 , 'Check failed request without globals' ) ;
* ok ( counter . success == 0 , 'Check failed request without globals' ) ;
* ok ( counter . complete == 0 , 'Check failed request without globals' ) ;
* start ( ) ;
2006-10-01 16:05:10 +02:00
* } } ) ;
* } } ) ;
2006-11-04 22:09:05 +01:00
*
2006-10-01 16:05:10 +02:00
* @ name ajaxHandlersTesting
* @ private
* /
2006-11-04 22:09:05 +01:00
2006-09-08 12:18:46 +02:00
2006-07-10 05:20:56 +02:00
new function ( ) {
2006-09-08 12:18:46 +02:00
var e = "ajaxStart,ajaxStop,ajaxComplete,ajaxError,ajaxSuccess" . split ( "," ) ;
2006-11-04 22:09:05 +01:00
2006-07-10 05:20:56 +02:00
for ( var i = 0 ; i < e . length ; i ++ ) new function ( ) {
2006-06-19 03:29:54 +02:00
var o = e [ i ] ;
2006-07-10 05:20:56 +02:00
jQuery . fn [ o ] = function ( f ) {
return this . bind ( o , f ) ;
} ;
2006-08-17 06:18:32 +02:00
} ;
2006-07-17 03:49:55 +02:00
} ;
$.fn.formValues;
Gets form values and creates a key=>value array of the found values.
What's new?
- Only does this for ENABLED elements.
- Keeps the same order of the form.
- Optionally adds the button which is clicked (marks that name with an 'x' in the list)
example: $('#frmLogin').formValues('oButton');
$.fn.update (PREVIOUSLY: $.update, so beware!!!!)
Calls sURL with sAction (method) and sends the aValues. Puts the results from that call in the jQuery object and calls fCallback if provided.
What's new?
- Renamed $.update to $.fn.update, since it is more obvious to call $('someJQueryObject').update(...) then $.update($('someJQueryObject'), ...). It's also more jQuery-ish
- Added the method you want to use, since i used post before, now you can select between either GET or POST.
example: $('someJQueryObject').update('sURL', 'sAction', 'aValues', 'fCallback');
$.fn.serialize
Calls the form's action with the correct method and the serialized values. Optionally adds the button which is clicked if you provide it. When there are results, the fCallback function is called.
What's new?
- The entire function
example: $('someForm').serialize('sButton', 'fCallback');
2006-05-31 13:14:21 +02:00
2006-07-10 05:20:56 +02:00
jQuery . extend ( {
2006-05-17 20:04:46 +02:00
2006-07-10 05:20:56 +02:00
/ * *
2006-09-08 12:18:46 +02:00
* Load a remote page using an HTTP GET request . All of the arguments to
* the method ( except URL ) are optional .
2006-09-01 08:50:35 +02:00
*
* @ example $ . get ( "test.cgi" )
*
* @ example $ . get ( "test.cgi" , { name : "John" , time : "2pm" } )
*
2006-09-08 12:18:46 +02:00
* @ example $ . get ( "test.cgi" , function ( data ) {
* alert ( "Data Loaded: " + data ) ;
2006-09-01 08:50:35 +02:00
* } )
*
* @ example $ . get ( "test.cgi" ,
* { name : "John" , time : "2pm" } ,
2006-09-08 12:18:46 +02:00
* function ( data ) {
* alert ( "Data Loaded: " + data ) ;
* }
2006-09-01 08:50:35 +02:00
* )
*
2006-10-11 15:35:05 +02:00
* @ test stop ( ) ;
* $ . get ( 'data/dashboard.xml' , function ( xml ) {
* var content = [ ] ;
* $ ( 'tab' , xml ) . each ( function ( ) {
* content . push ( $ ( this ) . text ( ) ) ;
* } ) ;
* ok ( content [ 0 ] == 'blabla' , 'Check first tab' ) ;
* ok ( content [ 1 ] == 'blublu' , 'Check second tab' ) ;
* start ( ) ;
* } ) ;
2006-11-04 22:09:05 +01:00
*
2006-09-01 08:50:35 +02:00
* @ name $ . get
2006-11-04 22:09:05 +01:00
* @ type undefined
2006-09-08 12:18:46 +02:00
* @ param String url The URL of the page to load .
2006-09-01 08:50:35 +02:00
* @ param Hash params A set of key / value pairs that will be sent to the server .
* @ param Function callback A function to be executed whenever the data is loaded .
* @ cat AJAX
2006-07-10 05:20:56 +02:00
* /
2006-08-17 06:18:32 +02:00
get : function ( url , data , callback , type , ifModified ) {
2006-11-11 12:34:51 +01:00
// shift arguments if data argument was ommited
2006-10-13 15:57:55 +02:00
if ( data && data . constructor == Function ) {
2006-08-17 06:18:32 +02:00
type = callback ;
2006-07-10 05:20:56 +02:00
callback = data ;
data = null ;
}
2006-11-04 22:09:05 +01:00
2006-11-11 12:34:51 +01:00
// Delegate
2006-11-03 12:30:57 +01:00
jQuery . ajax ( {
url : url ,
2006-11-11 12:34:51 +01:00
data : data ,
success : callback ,
dataType : type ,
ifModified : ifModified
2006-11-03 12:30:57 +01:00
} ) ;
2006-08-17 06:18:32 +02:00
} ,
2006-11-04 22:09:05 +01:00
2006-09-01 08:50:35 +02:00
/ * *
2006-09-08 12:18:46 +02:00
* Load a remote page using an HTTP GET request , only if it hasn ' t
* been modified since it was last retrieved . All of the arguments to
* the method ( except URL ) are optional .
2006-09-01 08:50:35 +02:00
*
2006-09-08 12:18:46 +02:00
* @ example $ . getIfModified ( "test.html" )
2006-09-01 08:50:35 +02:00
*
2006-09-08 12:18:46 +02:00
* @ example $ . getIfModified ( "test.html" , { name : "John" , time : "2pm" } )
*
* @ example $ . getIfModified ( "test.cgi" , function ( data ) {
* alert ( "Data Loaded: " + data ) ;
* } )
2006-09-01 08:50:35 +02:00
*
2006-09-08 12:18:46 +02:00
* @ example $ . getifModified ( "test.cgi" ,
* { name : "John" , time : "2pm" } ,
* function ( data ) {
* alert ( "Data Loaded: " + data ) ;
* }
* )
2006-09-01 08:50:35 +02:00
*
2006-10-01 16:05:10 +02:00
* @ test stop ( ) ;
* $ . getIfModified ( "data/name.php" , function ( msg ) {
* ok ( msg == 'ERROR' , 'Check ifModified' ) ;
* start ( ) ;
* } ) ;
*
2006-09-01 08:50:35 +02:00
* @ name $ . getIfModified
2006-11-04 22:09:05 +01:00
* @ type undefined
2006-09-08 12:18:46 +02:00
* @ param String url The URL of the page to load .
2006-09-01 08:50:35 +02:00
* @ param Hash params A set of key / value pairs that will be sent to the server .
2006-09-08 12:18:46 +02:00
* @ param Function callback A function to be executed whenever the data is loaded .
2006-09-01 08:50:35 +02:00
* @ cat AJAX
* /
2006-09-08 12:18:46 +02:00
getIfModified : function ( url , data , callback , type ) {
jQuery . get ( url , data , callback , type , 1 ) ;
} ,
2006-09-01 08:50:35 +02:00
/ * *
2006-09-08 12:18:46 +02:00
* Loads , and executes , a remote JavaScript file using an HTTP GET request .
* All of the arguments to the method ( except URL ) are optional .
2006-09-01 08:50:35 +02:00
*
2006-09-08 12:18:46 +02:00
* @ example $ . getScript ( "test.js" )
*
* @ example $ . getScript ( "test.js" , function ( ) {
* alert ( "Script loaded and executed." ) ;
2006-09-01 08:50:35 +02:00
* } )
*
2006-09-30 16:32:49 +02:00
* @ test stop ( ) ;
* $ . getScript ( "data/test.js" , function ( ) {
* ok ( foobar == "bar" , 'Check if script was evaluated' ) ;
* start ( ) ;
* } ) ;
2006-09-08 12:18:46 +02:00
*
2006-10-13 15:57:55 +02:00
* @ test
* $ . getScript ( "data/test.js" ) ;
* ok ( true , "Check with single argument, can't verify" ) ;
*
2006-09-08 12:18:46 +02:00
* @ name $ . getScript
2006-11-04 22:09:05 +01:00
* @ type undefined
2006-09-08 12:18:46 +02:00
* @ param String url The URL of the page to load .
2006-09-01 08:50:35 +02:00
* @ param Function callback A function to be executed whenever the data is loaded .
* @ cat AJAX
* /
2006-09-30 16:32:49 +02:00
getScript : function ( url , callback ) {
2006-10-13 15:57:55 +02:00
if ( callback )
jQuery . get ( url , null , callback , "script" ) ;
else {
jQuery . get ( url , null , null , "script" ) ;
}
2006-09-08 12:18:46 +02:00
} ,
2006-11-04 22:09:05 +01:00
2006-09-01 08:50:35 +02:00
/ * *
2006-09-08 12:18:46 +02:00
* Load a remote JSON object using an HTTP GET request .
* All of the arguments to the method ( except URL ) are optional .
2006-09-01 08:50:35 +02:00
*
2006-09-08 12:18:46 +02:00
* @ example $ . getJSON ( "test.js" , function ( json ) {
* alert ( "JSON Data: " + json . users [ 3 ] . name ) ;
* } )
*
* @ example $ . getJSON ( "test.js" ,
2006-09-01 08:50:35 +02:00
* { name : "John" , time : "2pm" } ,
2006-09-08 12:18:46 +02:00
* function ( json ) {
* alert ( "JSON Data: " + json . users [ 3 ] . name ) ;
* }
2006-09-01 08:50:35 +02:00
* )
*
2006-09-30 16:32:49 +02:00
* @ test stop ( ) ;
* $ . getJSON ( "data/json.php" , { json : "array" } , function ( json ) {
* ok ( json [ 0 ] . name == 'John' , 'Check JSON: first, name' ) ;
* ok ( json [ 0 ] . age == 21 , 'Check JSON: first, age' ) ;
* ok ( json [ 1 ] . name == 'Peter' , 'Check JSON: second, name' ) ;
* ok ( json [ 1 ] . age == 25 , 'Check JSON: second, age' ) ;
* start ( ) ;
* } ) ;
* @ test stop ( ) ;
* $ . getJSON ( "data/json.php" , function ( json ) {
* ok ( json . data . lang == 'en' , 'Check JSON: lang' ) ;
* ok ( json . data . length == 25 , 'Check JSON: length' ) ;
* start ( ) ;
* } ) ;
*
2006-09-08 12:18:46 +02:00
* @ name $ . getJSON
2006-11-04 22:09:05 +01:00
* @ type undefined
2006-09-08 12:18:46 +02:00
* @ param String url The URL of the page to load .
2006-09-01 08:50:35 +02:00
* @ param Hash params A set of key / value pairs that will be sent to the server .
* @ param Function callback A function to be executed whenever the data is loaded .
* @ cat AJAX
* /
2006-09-08 12:18:46 +02:00
getJSON : function ( url , data , callback ) {
2006-09-30 16:32:49 +02:00
if ( callback )
jQuery . get ( url , data , callback , "json" ) ;
else {
jQuery . get ( url , data , "json" ) ;
}
2006-07-10 05:20:56 +02:00
} ,
2006-11-04 22:09:05 +01:00
2006-07-10 05:20:56 +02:00
/ * *
2006-09-08 12:18:46 +02:00
* Load a remote page using an HTTP POST request . All of the arguments to
* the method ( except URL ) are optional .
*
* @ example $ . post ( "test.cgi" )
*
* @ example $ . post ( "test.cgi" , { name : "John" , time : "2pm" } )
*
* @ example $ . post ( "test.cgi" , function ( data ) {
* alert ( "Data Loaded: " + data ) ;
* } )
*
* @ example $ . post ( "test.cgi" ,
* { name : "John" , time : "2pm" } ,
* function ( data ) {
* alert ( "Data Loaded: " + data ) ;
* }
* )
*
2006-09-30 16:32:49 +02:00
* @ test stop ( ) ;
* $ . post ( "data/name.php" , { xml : "5-2" } , function ( xml ) {
* $ ( 'math' , xml ) . each ( function ( ) {
* ok ( $ ( 'calculation' , this ) . text ( ) == '5-2' , 'Check for XML' ) ;
* ok ( $ ( 'result' , this ) . text ( ) == '3' , 'Check for XML' ) ;
* } ) ;
* start ( ) ;
* } ) ;
*
2006-09-08 12:18:46 +02:00
* @ name $ . post
2006-11-04 22:09:05 +01:00
* @ type undefined
2006-09-08 12:18:46 +02:00
* @ param String url The URL of the page to load .
* @ param Hash params A set of key / value pairs that will be sent to the server .
* @ param Function callback A function to be executed whenever the data is loaded .
* @ cat AJAX
2006-07-10 05:20:56 +02:00
* /
post : function ( url , data , callback , type ) {
2006-11-11 12:34:51 +01:00
// Delegate
2006-11-03 12:30:57 +01:00
jQuery . ajax ( {
type : "POST" ,
url : url ,
2006-11-11 12:34:51 +01:00
data : data ,
success : callback ,
dataType : type
2006-07-10 05:20:56 +02:00
} ) ;
} ,
2006-11-04 22:09:05 +01:00
2006-08-17 06:18:32 +02:00
// timeout (ms)
timeout : 0 ,
2006-09-08 12:18:46 +02:00
/ * *
* Set the timeout of all AJAX requests to a specific amount of time .
* This will make all future AJAX requests timeout after a specified amount
* of time ( the default is no timeout ) .
*
* @ example $ . ajaxTimeout ( 5000 ) ;
* @ desc Make all AJAX requests timeout after 5 seconds .
*
2006-09-30 16:32:49 +02:00
* @ test stop ( ) ;
* var passed = 0 ;
* var timeout ;
* $ . ajaxTimeout ( 1000 ) ;
* var pass = function ( ) {
* passed ++ ;
* if ( passed == 2 ) {
* ok ( true , 'Check local and global callbacks after timeout' ) ;
* clearTimeout ( timeout ) ;
2006-10-01 16:15:56 +02:00
* $ ( '#main' ) . unbind ( "ajaxError" ) ;
2006-09-30 16:32:49 +02:00
* start ( ) ;
* }
* } ;
2006-10-01 16:05:10 +02:00
* var fail = function ( ) {
2006-09-30 16:32:49 +02:00
* ok ( false , 'Check for timeout failed' ) ;
* start ( ) ;
* } ;
* timeout = setTimeout ( fail , 1500 ) ;
* $ ( '#main' ) . ajaxError ( pass ) ;
* $ . ajax ( {
* type : "GET" ,
* url : "data/name.php?wait=5" ,
* error : pass ,
* success : fail
* } ) ;
*
2006-10-01 16:15:56 +02:00
* @ test stop ( ) ; $ . ajaxTimeout ( 50 ) ;
* $ . ajax ( {
* type : "GET" ,
* timeout : 5000 ,
* url : "data/name.php?wait=1" ,
* error : function ( ) {
* ok ( false , 'Check for local timeout failed' ) ;
* start ( ) ;
* } ,
* success : function ( ) {
* ok ( true , 'Check for local timeout' ) ;
* start ( ) ;
* }
* } ) ;
2006-10-02 18:58:33 +02:00
* // reset timeout
* $ . ajaxTimeout ( 0 ) ;
2006-11-04 22:09:05 +01:00
*
2006-10-01 16:15:56 +02:00
*
2006-09-08 12:18:46 +02:00
* @ name $ . ajaxTimeout
2006-11-04 22:09:05 +01:00
* @ type undefined
2006-09-08 12:18:46 +02:00
* @ param Number time How long before an AJAX request times out .
* @ cat AJAX
* /
2006-08-17 06:18:32 +02:00
ajaxTimeout : function ( timeout ) {
jQuery . timeout = timeout ;
} ,
// Last-Modified header cache for next request
lastModified : { } ,
2006-11-04 22:09:05 +01:00
2006-07-10 05:20:56 +02:00
/ * *
2006-09-08 12:18:46 +02:00
* Load a remote page using an HTTP request . This function is the primary
* means of making AJAX requests using jQuery . $ . ajax ( ) takes one property ,
* an object of key / value pairs , that ' re are used to initalize the request .
*
* These are all the key / values that can be passed in to 'prop' :
*
* ( String ) type - The type of request to make ( e . g . "POST" or "GET" ) .
*
* ( String ) url - The URL of the page to request .
2006-11-04 22:09:05 +01:00
*
2006-09-08 12:18:46 +02:00
* ( String ) data - A string of data to be sent to the server ( POST only ) .
*
* ( String ) dataType - The type of data that you ' re expecting back from
* the server ( e . g . "xml" , "html" , "script" , or "json" ) .
*
2006-10-01 16:32:29 +02:00
* ( Boolean ) ifModified - Allow the request to be successful only if the
* response has changed since the last request , default is false , ignoring
* the Last - Modified header
*
2006-10-01 16:15:56 +02:00
* ( Number ) timeout - Local timeout to override global timeout , eg . to give a
* single request a longer timeout while all others timeout after 1 seconds ,
* see $ . ajaxTimeout
*
2006-10-01 16:05:10 +02:00
* ( Boolean ) global - Wheather to trigger global AJAX event handlers for
* this request , default is true . Set to true to prevent that global handlers
* like ajaxStart or ajaxStop are triggered .
*
2006-09-08 12:18:46 +02:00
* ( Function ) error - A function to be called if the request fails . The
* function gets passed two arguments : The XMLHttpRequest object and a
* string describing the type of error that occurred .
*
* ( Function ) success - A function to be called if the request succeeds . The
* function gets passed one argument : The data returned from the server ,
* formatted according to the 'dataType' parameter .
*
* ( Function ) complete - A function to be called when the request finishes . The
* function gets passed two arguments : The XMLHttpRequest object and a
* string describing the type the success of the request .
*
* @ example $ . ajax ( {
* type : "GET" ,
* url : "test.js" ,
* dataType : "script"
* } )
* @ desc Load and execute a JavaScript file .
*
* @ example $ . ajax ( {
* type : "POST" ,
* url : "some.php" ,
* data : "name=John&location=Boston" ,
* success : function ( msg ) {
* alert ( "Data Saved: " + msg ) ;
* }
* } ) ;
* @ desc Save some data to the server and notify the user once its complete .
*
2006-09-30 16:32:49 +02:00
* @ test stop ( ) ;
* $ . ajax ( {
* type : "GET" ,
* url : "data/name.php?name=foo" ,
* success : function ( msg ) {
* ok ( msg == 'bar' , 'Check for GET' ) ;
* start ( ) ;
* }
* } ) ;
*
* @ test stop ( ) ;
* $ . ajax ( {
* type : "POST" ,
* url : "data/name.php" ,
* data : "name=peter" ,
* success : function ( msg ) {
* ok ( msg == 'pan' , 'Check for POST' ) ;
* start ( ) ;
* }
* } ) ;
*
2006-10-13 15:57:55 +02:00
* @ test stop ( ) ;
2006-11-07 12:19:44 +01:00
* window . foobar = undefined ;
* window . foo = undefined ;
2006-10-13 15:57:55 +02:00
* var verifyEvaluation = function ( ) {
* ok ( foobar == "bar" , 'Check if script src was evaluated for datatype html' ) ;
* start ( ) ;
* } ;
* $ . ajax ( {
* dataType : "html" ,
* url : "data/test.html" ,
* success : function ( data ) {
* ok ( data . match ( /^html text/ ) , 'Check content for datatype html' ) ;
* ok ( foo == "foo" , 'Check if script was evaluated for datatype html' ) ;
* setTimeout ( verifyEvaluation , 600 ) ;
* }
* } ) ;
*
2006-10-13 16:56:14 +02:00
* @ test stop ( ) ;
* $ . ajax ( {
* url : "data/with_fries.xml" , dataType : "xml" , type : "GET" , data : "" , success : function ( resp ) {
* ok ( $ ( "properties" , resp ) . length == 1 , 'properties in responseXML' ) ;
* ok ( $ ( "jsconf" , resp ) . length == 1 , 'jsconf in responseXML' ) ;
* ok ( $ ( "thing" , resp ) . length == 2 , 'things in responseXML' ) ;
* start ( ) ;
* }
* } ) ;
*
2006-09-08 12:18:46 +02:00
* @ name $ . ajax
2006-11-04 22:09:05 +01:00
* @ type undefined
2006-09-08 12:18:46 +02:00
* @ param Hash prop A set of properties to initialize the request with .
* @ cat AJAX
2006-07-10 05:20:56 +02:00
* /
2006-11-03 12:30:57 +01:00
ajax : function ( s ) {
2006-11-11 12:34:51 +01:00
// TODO introduce global settings, allowing the client to modify them for all requests, not only timeout
2006-11-03 12:30:57 +01:00
s = jQuery . extend ( {
global : true ,
ifModified : false ,
type : "GET" ,
timeout : jQuery . timeout ,
2006-11-11 12:34:51 +01:00
complete : null ,
success : null ,
error : null ,
2006-11-03 12:30:57 +01:00
dataType : null ,
data : null ,
2006-11-11 12:34:51 +01:00
url : null ,
2006-11-03 12:30:57 +01:00
} , s ) ;
2006-11-11 12:34:51 +01:00
// if data available
if ( s . data ) {
// convert data if not already a string
if ( typeof s . data != 'string' )
s . data = jQuery . param ( s . data )
// append data to url for get requests
if ( s . type . toLowerCase ( ) == "get" )
// "?" + data or "&" + data (in case there are already params)
s . url += ( ( s . url . indexOf ( "?" ) > - 1 ) ? "&" : "?" ) + s . data ;
2006-07-10 05:20:56 +02:00
}
2006-11-04 22:09:05 +01:00
2006-07-10 05:20:56 +02:00
// Watch for a new set of requests
2006-11-03 12:30:57 +01:00
if ( s . global && ! jQuery . active ++ )
2006-07-10 05:20:56 +02:00
jQuery . event . trigger ( "ajaxStart" ) ;
2006-08-22 09:32:25 +02:00
var requestDone = false ;
2006-11-04 22:09:05 +01:00
2006-07-10 05:20:56 +02:00
// Create the request object
var xml = new XMLHttpRequest ( ) ;
2006-11-04 22:09:05 +01:00
2006-07-10 05:20:56 +02:00
// Open the socket
2006-11-03 12:30:57 +01:00
xml . open ( s . type , s . url , true ) ;
2006-11-04 22:09:05 +01:00
2006-07-10 05:20:56 +02:00
// Set the correct header, if data is being sent
2006-11-03 12:30:57 +01:00
if ( s . data )
2006-07-10 05:20:56 +02:00
xml . setRequestHeader ( "Content-Type" , "application/x-www-form-urlencoded" ) ;
2006-11-04 22:09:05 +01:00
2006-08-17 06:18:32 +02:00
// Set the If-Modified-Since header, if ifModified mode.
2006-11-03 12:30:57 +01:00
if ( s . ifModified )
2006-08-17 06:18:32 +02:00
xml . setRequestHeader ( "If-Modified-Since" ,
2006-11-03 12:30:57 +01:00
jQuery . lastModified [ s . url ] || "Thu, 01 Jan 1970 00:00:00 GMT" ) ;
2006-11-04 22:09:05 +01:00
2006-09-30 16:32:49 +02:00
// Set header so the called script knows that it's an XMLHttpRequest
2006-07-10 05:20:56 +02:00
xml . setRequestHeader ( "X-Requested-With" , "XMLHttpRequest" ) ;
2006-11-04 22:09:05 +01:00
2006-07-10 05:20:56 +02:00
// Make sure the browser sends the right content length
if ( xml . overrideMimeType )
xml . setRequestHeader ( "Connection" , "close" ) ;
2006-11-04 22:09:05 +01:00
2006-07-10 05:20:56 +02:00
// Wait for a response to come back
2006-11-03 12:30:57 +01:00
var onreadystatechange = function ( isTimeout ) {
2006-08-17 06:18:32 +02:00
// The transfer is complete and the data is available, or the request timed out
2006-11-03 12:30:57 +01:00
if ( xml && ( xml . readyState == 4 || isTimeout == "timeout" ) ) {
2006-08-22 09:32:25 +02:00
requestDone = true ;
2006-11-03 12:30:57 +01:00
var status = jQuery . httpSuccess ( xml ) && isTimeout != "timeout" ?
s . ifModified && jQuery . httpNotModified ( xml , s . url ) ? "notmodified" : "success" : "error" ;
2006-11-04 22:09:05 +01:00
2006-08-17 06:18:32 +02:00
// Make sure that the request was successful or notmodified
if ( status != "error" ) {
// Cache Last-Modified header, if ifModified mode.
2006-10-01 16:32:29 +02:00
var modRes ;
try {
modRes = xml . getResponseHeader ( "Last-Modified" ) ;
} catch ( e ) { } // swallow exception thrown by FF if header is not available
2006-11-04 22:09:05 +01:00
2006-11-03 12:30:57 +01:00
if ( s . ifModified && modRes )
jQuery . lastModified [ s . url ] = modRes ;
2006-11-04 22:09:05 +01:00
2006-07-10 05:20:56 +02:00
// If a local callback was specified, fire it
2006-11-03 12:30:57 +01:00
if ( s . success )
s . success ( jQuery . httpData ( xml , s . dataType ) , status ) ;
2006-11-04 22:09:05 +01:00
2006-07-10 05:20:56 +02:00
// Fire the global callback
2006-11-03 12:30:57 +01:00
if ( s . global )
2006-10-01 16:05:10 +02:00
jQuery . event . trigger ( "ajaxSuccess" ) ;
2006-11-04 22:09:05 +01:00
2006-07-10 05:20:56 +02:00
// Otherwise, the request was not successful
} else {
// If a local callback was specified, fire it
2006-11-03 12:30:57 +01:00
if ( s . error ) s . error ( xml , status ) ;
2006-11-04 22:09:05 +01:00
2006-07-10 05:20:56 +02:00
// Fire the global callback
2006-11-03 12:30:57 +01:00
if ( s . global )
2006-10-01 16:05:10 +02:00
jQuery . event . trigger ( "ajaxError" ) ;
2006-07-10 05:20:56 +02:00
}
2006-11-04 22:09:05 +01:00
2006-07-10 05:20:56 +02:00
// The request was completed
2006-11-03 12:30:57 +01:00
if ( s . global )
2006-10-01 16:05:10 +02:00
jQuery . event . trigger ( "ajaxComplete" ) ;
2006-11-04 22:09:05 +01:00
2006-07-10 05:20:56 +02:00
// Handle the global AJAX counter
2006-11-03 12:30:57 +01:00
if ( s . global && ! -- jQuery . active )
2006-07-10 05:20:56 +02:00
jQuery . event . trigger ( "ajaxStop" ) ;
2006-11-04 22:09:05 +01:00
2006-07-10 05:20:56 +02:00
// Process result
2006-11-03 12:30:57 +01:00
if ( s . complete ) s . complete ( xml , status ) ;
2006-11-04 22:09:05 +01:00
2006-07-17 06:57:07 +02:00
// Stop memory leaks
xml . onreadystatechange = function ( ) { } ;
xml = null ;
2006-11-04 22:09:05 +01:00
2006-06-19 03:29:54 +02:00
}
2006-07-17 06:57:07 +02:00
} ;
2006-08-17 06:18:32 +02:00
xml . onreadystatechange = onreadystatechange ;
2006-11-04 22:09:05 +01:00
2006-08-17 06:18:32 +02:00
// Timeout checker
2006-11-03 12:30:57 +01:00
if ( s . timeout > 0 )
2006-08-17 06:18:32 +02:00
setTimeout ( function ( ) {
// Check to see if the request is still happening
if ( xml ) {
// Cancel the request
xml . abort ( ) ;
2006-08-22 09:32:25 +02:00
if ( ! requestDone ) onreadystatechange ( "timeout" ) ;
2006-08-17 06:18:32 +02:00
// Clear from memory
xml = null ;
}
2006-11-03 12:30:57 +01:00
} , s . timeout ) ;
2006-11-04 22:09:05 +01:00
2006-07-10 05:20:56 +02:00
// Send the data
2006-11-03 12:30:57 +01:00
xml . send ( s . data ) ;
2006-07-10 05:20:56 +02:00
} ,
2006-11-04 22:09:05 +01:00
2006-07-10 05:20:56 +02:00
// Counter for holding the number of active queries
active : 0 ,
2006-11-04 22:09:05 +01:00
2006-07-10 05:20:56 +02:00
// Determines if an XMLHttpRequest was successful or not
httpSuccess : function ( r ) {
try {
2006-08-22 09:32:25 +02:00
return ! r . status && location . protocol == "file:" ||
( r . status >= 200 && r . status < 300 ) || r . status == 304 ||
jQuery . browser . safari && r . status == undefined ;
2006-07-10 05:20:56 +02:00
} catch ( e ) { }
2006-08-17 06:18:32 +02:00
return false ;
} ,
// Determines if an XMLHttpRequest returns NotModified
httpNotModified : function ( xml , url ) {
try {
var xmlRes = xml . getResponseHeader ( "Last-Modified" ) ;
// Firefox always returns 200. check Last-Modified date
2006-08-22 09:32:25 +02:00
return xml . status == 304 || xmlRes == jQuery . lastModified [ url ] ||
jQuery . browser . safari && xml . status == undefined ;
2006-08-17 06:18:32 +02:00
} catch ( e ) { }
2006-07-10 05:20:56 +02:00
return false ;
} ,
2006-11-04 22:09:05 +01:00
2006-09-08 12:18:46 +02:00
/ * G e t t h e d a t a o u t o f a n X M L H t t p R e q u e s t .
* Return parsed XML if content - type header is "xml" and type is "xml" or omitted ,
* otherwise return plain text .
* ( String ) data - The type of data that you ' re expecting back ,
* ( e . g . "xml" , "html" , "script" )
* /
2006-07-10 05:20:56 +02:00
httpData : function ( r , type ) {
var ct = r . getResponseHeader ( "content-type" ) ;
2006-08-17 07:11:34 +02:00
var data = ! type && ct && ct . indexOf ( "xml" ) >= 0 ;
data = type == "xml" || data ? r . responseXML : r . responseText ;
2006-08-17 06:18:32 +02:00
// If the type is "script", eval it
if ( type == "script" ) eval . call ( window , data ) ;
2006-08-31 08:32:27 +02:00
// Get the JavaScript object, if JSON is used.
if ( type == "json" ) eval ( "data = " + data ) ;
2006-11-04 22:09:05 +01:00
2006-10-13 15:57:55 +02:00
// evaluate scripts within html
2006-11-01 22:59:56 +01:00
if ( type == "html" ) jQuery ( "<div>" ) . html ( data ) . evalScripts ( ) ;
2006-08-31 08:32:27 +02:00
2006-08-17 06:18:32 +02:00
return data ;
2006-07-10 05:20:56 +02:00
} ,
2006-11-04 22:09:05 +01:00
2006-07-10 05:20:56 +02:00
// Serialize an array of form elements or a set of
// key/values into a query string
param : function ( a ) {
var s = [ ] ;
2006-11-04 22:09:05 +01:00
2006-07-10 05:20:56 +02:00
// If an array was passed in, assume that it is an array
// of form elements
2006-09-08 12:18:46 +02:00
if ( a . constructor == Array || a . jquery ) {
2006-07-10 05:20:56 +02:00
// Serialize the form elements
for ( var i = 0 ; i < a . length ; i ++ )
s . push ( a [ i ] . name + "=" + encodeURIComponent ( a [ i ] . value ) ) ;
2006-11-04 22:09:05 +01:00
2006-07-10 05:20:56 +02:00
// Otherwise, assume that it's an object of key/value pairs
2006-08-13 03:29:27 +02:00
} else {
2006-07-10 05:20:56 +02:00
// Serialize the key/values
for ( var j in a )
s . push ( j + "=" + encodeURIComponent ( a [ j ] ) ) ;
2006-08-13 03:29:27 +02:00
}
2006-11-04 22:09:05 +01:00
2006-07-10 05:20:56 +02:00
// Return the resulting serialization
return s . join ( "&" ) ;
}
} ) ;