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.
|
|
|
|
*
|
2006-12-15 10:13:24 +01:00
|
|
|
* @example $("#feeds").loadIfModified("feeds.html");
|
2006-09-30 16:32:49 +02:00
|
|
|
* @before <div id="feeds"></div>
|
|
|
|
* @result <div id="feeds"><b>45</b> feeds found.</div>
|
|
|
|
*
|
|
|
|
* @name loadIfModified
|
|
|
|
* @type jQuery
|
|
|
|
* @param String url The URL of the HTML file to load.
|
2007-01-04 11:03:34 +01:00
|
|
|
* @param Map params (optional) Key/value pairs that will be sent to the server.
|
2006-12-15 10:13:24 +01:00
|
|
|
* @param Function callback (optional) A function to be executed whenever the data is loaded (parameters: responseText, status and response itself).
|
2007-01-07 10:20:19 +01:00
|
|
|
* @cat Ajax
|
2006-09-30 16:32:49 +02:00
|
|
|
*/
|
|
|
|
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.
|
|
|
|
*
|
2006-12-21 14:39:14 +01:00
|
|
|
* Note: Avoid to use this to load scripts, instead use $.getScript.
|
2007-01-01 16:26:24 +01:00
|
|
|
* IE strips script tags when there aren't any other characters in front of it.
|
2006-12-21 14:39:14 +01:00
|
|
|
*
|
2006-12-15 10:13:24 +01:00
|
|
|
* @example $("#feeds").load("feeds.html");
|
2006-09-30 16:32:49 +02:00
|
|
|
* @before <div id="feeds"></div>
|
|
|
|
* @result <div id="feeds"><b>45</b> feeds found.</div>
|
|
|
|
*
|
|
|
|
* @example $("#feeds").load("feeds.html",
|
2006-12-15 10:13:24 +01:00
|
|
|
* {limit: 25},
|
|
|
|
* function() { alert("The last 25 entries in the feed have been loaded"); }
|
2006-09-30 16:32:49 +02:00
|
|
|
* );
|
|
|
|
* @desc Same as above, but with an additional parameter
|
|
|
|
* and a callback that is executed when the data was loaded.
|
|
|
|
*
|
|
|
|
* @name load
|
|
|
|
* @type jQuery
|
|
|
|
* @param String url The URL of the HTML file to load.
|
2006-12-15 10:13:24 +01:00
|
|
|
* @param Object params (optional) A set of key/value pairs that will be sent as data to the server.
|
|
|
|
* @param Function callback (optional) A function to be executed whenever the data is loaded (parameters: responseText, status and response itself).
|
2007-01-07 10:20:19 +01:00
|
|
|
* @cat Ajax
|
2006-09-30 16:32:49 +02:00
|
|
|
*/
|
|
|
|
load: function( url, params, callback, ifModified ) {
|
2007-01-14 07:22:20 +01:00
|
|
|
if ( jQuery.isFunction( url ) )
|
2006-09-30 16:32:49 +02:00
|
|
|
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
|
2007-01-06 07:18:02 +01:00
|
|
|
if ( params )
|
2006-09-30 16:32:49 +02:00
|
|
|
// If it's a function
|
2007-01-16 12:38:33 +01:00
|
|
|
if ( jQuery.isFunction( params ) ) {
|
2006-09-30 16:32:49 +02:00
|
|
|
// 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){
|
2007-01-06 07:18:02 +01:00
|
|
|
if ( status == "success" || !ifModified && status == "notmodified" )
|
2006-11-03 12:30:57 +01:00
|
|
|
// Inject the HTML into all the matched elements
|
2007-02-07 16:20:30 +01:00
|
|
|
self.html(res.responseText)
|
2006-11-03 12:30:57 +01:00
|
|
|
// 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] );
|
2007-01-06 07:18:02 +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-12-15 10:13:24 +01:00
|
|
|
* This will serialize all given elements.
|
|
|
|
*
|
|
|
|
* A serialization similar to the form submit of a browser is
|
|
|
|
* provided by the form plugin. It also takes multiple-selects
|
|
|
|
* into account, while this method recognizes only a single option.
|
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
|
|
|
|
*
|
|
|
|
* @name serialize
|
|
|
|
* @type String
|
2007-01-07 10:20:19 +01:00
|
|
|
* @cat Ajax
|
2006-09-30 16:32:49 +02:00
|
|
|
*/
|
|
|
|
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
|
2007-01-07 10:20:19 +01:00
|
|
|
* @cat Ajax
|
2006-11-11 12:34:51 +01:00
|
|
|
*/
|
2006-10-13 15:57:55 +02:00
|
|
|
evalScripts: function() {
|
2007-01-14 07:02:56 +01:00
|
|
|
return this.find("script").each(function(){
|
2006-10-13 15:57:55 +02:00
|
|
|
if ( this.src )
|
2006-11-20 21:37:28 +01:00
|
|
|
jQuery.getScript( this.src );
|
2007-01-06 07:18:02 +01:00
|
|
|
else
|
2006-12-02 14:43:02 +01:00
|
|
|
jQuery.globalEval( this.text || this.textContent || this.innerHTML || "" );
|
2006-10-13 15:57:55 +02:00
|
|
|
}).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
|
2007-01-17 15:17:09 +01:00
|
|
|
if ( !window.XMLHttpRequest )
|
2006-06-19 03:29:54 +02:00
|
|
|
XMLHttpRequest = function(){
|
2006-12-04 20:37:49 +01:00
|
|
|
return new ActiveXObject("Microsoft.XMLHTTP");
|
2006-06-19 03:29:54 +02:00
|
|
|
};
|
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
|
|
|
|
|
|
|
/**
|
2006-12-15 10:13:24 +01:00
|
|
|
* Attach a function to be executed whenever an AJAX request begins
|
|
|
|
* and there is none already active.
|
2006-09-08 12:18:46 +02:00
|
|
|
*
|
|
|
|
* @example $("#loading").ajaxStart(function(){
|
|
|
|
* $(this).show();
|
|
|
|
* });
|
2006-12-15 10:13:24 +01:00
|
|
|
* @desc Show a loading message whenever an AJAX request starts
|
|
|
|
* (and none is already active).
|
2006-09-08 12:18:46 +02:00
|
|
|
*
|
|
|
|
* @name ajaxStart
|
|
|
|
* @type jQuery
|
|
|
|
* @param Function callback The function to execute.
|
2007-01-07 10:20:19 +01:00
|
|
|
* @cat Ajax
|
2006-09-08 12:18:46 +02:00
|
|
|
*/
|
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.
|
2007-01-07 10:20:19 +01:00
|
|
|
* @cat Ajax
|
2006-09-08 12:18:46 +02:00
|
|
|
*/
|
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.
|
|
|
|
*
|
2006-12-11 09:53:33 +01:00
|
|
|
* The XMLHttpRequest and settings used for that request are passed
|
|
|
|
* as arguments to the callback.
|
|
|
|
*
|
|
|
|
* @example $("#msg").ajaxComplete(function(request, settings){
|
2006-09-08 12:18:46 +02:00
|
|
|
* $(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.
|
2007-01-07 10:20:19 +01:00
|
|
|
* @cat Ajax
|
2006-09-08 12:18:46 +02:00
|
|
|
*/
|
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.
|
|
|
|
*
|
2006-12-11 09:53:33 +01:00
|
|
|
* The XMLHttpRequest and settings used for that request are passed
|
|
|
|
* as arguments to the callback.
|
|
|
|
*
|
|
|
|
* @example $("#msg").ajaxSuccess(function(request, settings){
|
2006-09-08 12:18:46 +02:00
|
|
|
* $(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.
|
2007-01-07 10:20:19 +01:00
|
|
|
* @cat Ajax
|
2006-09-08 12:18:46 +02:00
|
|
|
*/
|
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.
|
|
|
|
*
|
2006-12-11 09:53:33 +01:00
|
|
|
* The XMLHttpRequest and settings used for that request are passed
|
2006-12-21 14:35:32 +01:00
|
|
|
* as arguments to the callback. A third argument, an exception object,
|
|
|
|
* is passed if an exception occured while processing the request.
|
2006-12-11 09:53:33 +01:00
|
|
|
*
|
|
|
|
* @example $("#msg").ajaxError(function(request, settings){
|
|
|
|
* $(this).append("<li>Error requesting page " + settings.url + "</li>");
|
2006-09-08 12:18:46 +02:00
|
|
|
* });
|
|
|
|
* @desc Show a message when an AJAX request fails.
|
|
|
|
*
|
|
|
|
* @name ajaxError
|
|
|
|
* @type jQuery
|
|
|
|
* @param Function callback The function to execute.
|
2007-01-07 10:20:19 +01:00
|
|
|
* @cat Ajax
|
2006-09-08 12:18:46 +02:00
|
|
|
*/
|
2006-12-11 09:53:33 +01:00
|
|
|
|
|
|
|
/**
|
2007-01-14 20:49:58 +01:00
|
|
|
* Attach a function to be executed before an AJAX request is sent.
|
2006-12-11 09:53:33 +01:00
|
|
|
*
|
|
|
|
* The XMLHttpRequest and settings used for that request are passed
|
|
|
|
* as arguments to the callback.
|
|
|
|
*
|
|
|
|
* @example $("#msg").ajaxSend(function(request, settings){
|
|
|
|
* $(this).append("<li>Starting request at " + settings.url + "</li>");
|
|
|
|
* });
|
2007-01-14 20:49:58 +01:00
|
|
|
* @desc Show a message before an AJAX request is sent.
|
2006-12-11 09:53:33 +01:00
|
|
|
*
|
|
|
|
* @name ajaxSend
|
|
|
|
* @type jQuery
|
|
|
|
* @param Function callback The function to execute.
|
2007-01-07 10:20:19 +01:00
|
|
|
* @cat Ajax
|
2006-12-11 09:53:33 +01:00
|
|
|
*/
|
2007-01-06 06:31:47 +01:00
|
|
|
jQuery.each( "ajaxStart,ajaxStop,ajaxComplete,ajaxError,ajaxSuccess,ajaxSend".split(","), function(i,o){
|
|
|
|
jQuery.fn[o] = function(f){
|
|
|
|
return this.bind(o, f);
|
2006-08-17 06:18:32 +02:00
|
|
|
};
|
2007-01-06 06:31:47 +01: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-12-15 10:13:24 +01:00
|
|
|
* Load a remote page using an HTTP GET request.
|
2006-09-01 08:50:35 +02:00
|
|
|
*
|
2006-12-15 10:13:24 +01:00
|
|
|
* @example $.get("test.cgi");
|
2006-09-01 08:50:35 +02:00
|
|
|
*
|
2006-12-15 10:13:24 +01:00
|
|
|
* @example $.get("test.cgi", { name: "John", time: "2pm" } );
|
2006-09-01 08:50:35 +02:00
|
|
|
*
|
2006-09-08 12:18:46 +02:00
|
|
|
* @example $.get("test.cgi", function(data){
|
|
|
|
* alert("Data Loaded: " + data);
|
2006-12-15 10:13:24 +01:00
|
|
|
* });
|
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-12-15 10:13:24 +01:00
|
|
|
* );
|
2006-09-01 08:50:35 +02:00
|
|
|
*
|
|
|
|
* @name $.get
|
2006-12-15 10:13:24 +01:00
|
|
|
* @type XMLHttpRequest
|
2006-09-08 12:18:46 +02:00
|
|
|
* @param String url The URL of the page to load.
|
2007-01-04 11:03:34 +01:00
|
|
|
* @param Map params (optional) Key/value pairs that will be sent to the server.
|
2006-12-15 10:13:24 +01:00
|
|
|
* @param Function callback (optional) A function to be executed whenever the data is loaded.
|
2007-01-07 10:20:19 +01:00
|
|
|
* @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
|
2007-01-14 07:22:20 +01:00
|
|
|
if ( jQuery.isFunction( data ) ) {
|
2006-07-10 05:20:56 +02:00
|
|
|
callback = data;
|
|
|
|
data = null;
|
|
|
|
}
|
2007-01-06 07:18:02 +01:00
|
|
|
|
2006-12-15 10:13:24 +01:00
|
|
|
return jQuery.ajax({
|
2006-11-03 12:30:57 +01:00
|
|
|
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
|
2006-12-15 10:13:24 +01:00
|
|
|
* been modified since it was last retrieved.
|
2006-09-01 08:50:35 +02:00
|
|
|
*
|
2006-12-15 10:13:24 +01:00
|
|
|
* @example $.getIfModified("test.html");
|
2006-09-01 08:50:35 +02:00
|
|
|
*
|
2006-12-15 10:13:24 +01:00
|
|
|
* @example $.getIfModified("test.html", { name: "John", time: "2pm" } );
|
2006-09-08 12:18:46 +02:00
|
|
|
*
|
|
|
|
* @example $.getIfModified("test.cgi", function(data){
|
|
|
|
* alert("Data Loaded: " + data);
|
2006-12-15 10:13:24 +01:00
|
|
|
* });
|
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-12-15 10:13:24 +01:00
|
|
|
* );
|
2006-09-01 08:50:35 +02:00
|
|
|
*
|
|
|
|
* @name $.getIfModified
|
2006-12-15 10:13:24 +01:00
|
|
|
* @type XMLHttpRequest
|
2006-09-08 12:18:46 +02:00
|
|
|
* @param String url The URL of the page to load.
|
2007-01-04 11:03:34 +01:00
|
|
|
* @param Map params (optional) Key/value pairs that will be sent to the server.
|
2006-12-15 10:13:24 +01:00
|
|
|
* @param Function callback (optional) A function to be executed whenever the data is loaded.
|
2007-01-07 10:20:19 +01:00
|
|
|
* @cat Ajax
|
2006-09-01 08:50:35 +02:00
|
|
|
*/
|
2006-09-08 12:18:46 +02:00
|
|
|
getIfModified: function( url, data, callback, type ) {
|
2006-12-15 10:13:24 +01:00
|
|
|
return jQuery.get(url, data, callback, type, 1);
|
2006-09-08 12:18:46 +02:00
|
|
|
},
|
|
|
|
|
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.
|
2006-09-01 08:50:35 +02:00
|
|
|
*
|
2006-12-02 14:43:02 +01:00
|
|
|
* Warning: Safari <= 2.0.x is unable to evalulate scripts in a global
|
2006-12-15 10:13:24 +01:00
|
|
|
* context synchronously. If you load functions via getScript, make sure
|
2006-12-02 14:43:02 +01:00
|
|
|
* to call them after a delay.
|
|
|
|
*
|
2006-12-15 10:13:24 +01:00
|
|
|
* @example $.getScript("test.js");
|
2006-09-08 12:18:46 +02:00
|
|
|
*
|
|
|
|
* @example $.getScript("test.js", function(){
|
|
|
|
* alert("Script loaded and executed.");
|
2006-12-15 10:13:24 +01:00
|
|
|
* });
|
2006-09-01 08:50:35 +02:00
|
|
|
*
|
2006-09-08 12:18:46 +02:00
|
|
|
* @name $.getScript
|
2006-12-15 10:13:24 +01:00
|
|
|
* @type XMLHttpRequest
|
2006-09-08 12:18:46 +02:00
|
|
|
* @param String url The URL of the page to load.
|
2006-12-15 10:13:24 +01:00
|
|
|
* @param Function callback (optional) A function to be executed whenever the data is loaded.
|
2007-01-07 10:20:19 +01:00
|
|
|
* @cat Ajax
|
2006-09-01 08:50:35 +02:00
|
|
|
*/
|
2006-09-30 16:32:49 +02:00
|
|
|
getScript: function( url, callback ) {
|
2006-12-15 10:13:24 +01:00
|
|
|
return jQuery.get(url, null, callback, "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-12-15 10:13:24 +01:00
|
|
|
* Load JSON data using an HTTP GET request.
|
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);
|
2006-12-15 10:13:24 +01:00
|
|
|
* });
|
2006-09-08 12:18:46 +02:00
|
|
|
*
|
|
|
|
* @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-12-15 10:13:24 +01:00
|
|
|
* );
|
2006-09-01 08:50:35 +02:00
|
|
|
*
|
2006-09-08 12:18:46 +02:00
|
|
|
* @name $.getJSON
|
2006-12-15 10:13:24 +01:00
|
|
|
* @type XMLHttpRequest
|
2006-09-08 12:18:46 +02:00
|
|
|
* @param String url The URL of the page to load.
|
2007-01-04 11:03:34 +01:00
|
|
|
* @param Map params (optional) Key/value pairs that will be sent to the server.
|
2006-09-01 08:50:35 +02:00
|
|
|
* @param Function callback A function to be executed whenever the data is loaded.
|
2007-01-07 10:20:19 +01:00
|
|
|
* @cat Ajax
|
2006-09-01 08:50:35 +02:00
|
|
|
*/
|
2006-09-08 12:18:46 +02:00
|
|
|
getJSON: function( url, data, callback ) {
|
2006-12-15 10:13:24 +01:00
|
|
|
return jQuery.get(url, data, callback, "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-12-15 10:13:24 +01:00
|
|
|
* Load a remote page using an HTTP POST request.
|
2006-09-08 12:18:46 +02:00
|
|
|
*
|
2006-12-15 10:13:24 +01:00
|
|
|
* @example $.post("test.cgi");
|
2006-09-08 12:18:46 +02:00
|
|
|
*
|
2006-12-15 10:13:24 +01:00
|
|
|
* @example $.post("test.cgi", { name: "John", time: "2pm" } );
|
2006-09-08 12:18:46 +02:00
|
|
|
*
|
|
|
|
* @example $.post("test.cgi", function(data){
|
|
|
|
* alert("Data Loaded: " + data);
|
2006-12-15 10:13:24 +01:00
|
|
|
* });
|
2006-09-08 12:18:46 +02:00
|
|
|
*
|
|
|
|
* @example $.post("test.cgi",
|
|
|
|
* { name: "John", time: "2pm" },
|
|
|
|
* function(data){
|
|
|
|
* alert("Data Loaded: " + data);
|
|
|
|
* }
|
2006-12-15 10:13:24 +01:00
|
|
|
* );
|
2006-09-08 12:18:46 +02:00
|
|
|
*
|
|
|
|
* @name $.post
|
2006-12-15 10:13:24 +01:00
|
|
|
* @type XMLHttpRequest
|
2006-09-08 12:18:46 +02:00
|
|
|
* @param String url The URL of the page to load.
|
2007-01-04 11:03:34 +01:00
|
|
|
* @param Map params (optional) Key/value pairs that will be sent to the server.
|
2006-12-15 10:13:24 +01:00
|
|
|
* @param Function callback (optional) A function to be executed whenever the data is loaded.
|
2007-01-07 10:20:19 +01:00
|
|
|
* @cat Ajax
|
2006-07-10 05:20:56 +02:00
|
|
|
*/
|
|
|
|
post: function( url, data, callback, type ) {
|
2007-01-22 04:49:04 +01:00
|
|
|
if ( jQuery.isFunction( data ) ) {
|
|
|
|
callback = data;
|
|
|
|
data = {};
|
|
|
|
}
|
|
|
|
|
2006-12-15 10:13:24 +01:00
|
|
|
return jQuery.ajax({
|
2006-11-03 12:30:57 +01:00
|
|
|
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)
|
2006-12-22 14:56:36 +01:00
|
|
|
//timeout: 0,
|
2006-08-17 06:18:32 +02:00
|
|
|
|
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
|
2006-12-15 10:13:24 +01:00
|
|
|
* of time.
|
|
|
|
*
|
|
|
|
* Set to null or 0 to disable timeouts (default).
|
|
|
|
*
|
|
|
|
* You can manually abort requests with the XMLHttpRequest's (returned by
|
|
|
|
* all ajax functions) abort() method.
|
2006-09-08 12:18:46 +02:00
|
|
|
*
|
2006-12-22 15:40:46 +01:00
|
|
|
* Deprecated. Use $.ajaxSetup instead.
|
|
|
|
*
|
2006-09-08 12:18:46 +02:00
|
|
|
* @example $.ajaxTimeout( 5000 );
|
|
|
|
* @desc Make all AJAX requests timeout after 5 seconds.
|
|
|
|
*
|
|
|
|
* @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.
|
2007-01-07 10:20:19 +01:00
|
|
|
* @cat Ajax
|
2006-09-08 12:18:46 +02:00
|
|
|
*/
|
2007-01-06 07:18:02 +01:00
|
|
|
ajaxTimeout: function( timeout ) {
|
2006-12-22 14:56:36 +01:00
|
|
|
jQuery.ajaxSettings.timeout = timeout;
|
|
|
|
},
|
|
|
|
|
2006-12-22 15:40:46 +01:00
|
|
|
/**
|
|
|
|
* Setup global settings for AJAX requests.
|
|
|
|
*
|
|
|
|
* See $.ajax for a description of all available options.
|
|
|
|
*
|
|
|
|
* @example $.ajaxSetup( {
|
|
|
|
* url: "/xmlhttp/",
|
|
|
|
* global: false,
|
|
|
|
* type: "POST"
|
|
|
|
* } );
|
2007-01-04 11:03:34 +01:00
|
|
|
* $.ajax({ data: myData });
|
2006-12-22 15:40:46 +01:00
|
|
|
* @desc Sets the defaults for AJAX requests to the url "/xmlhttp/",
|
2007-01-04 11:03:34 +01:00
|
|
|
* disables global handlers and uses POST instead of GET. The following
|
|
|
|
* AJAX requests then sends some data without having to set anything else.
|
2006-12-22 15:40:46 +01:00
|
|
|
*
|
|
|
|
* @name $.ajaxSetup
|
|
|
|
* @type undefined
|
2007-01-04 11:03:34 +01:00
|
|
|
* @param Map settings Key/value pairs to use for all AJAX requests
|
2007-01-07 10:20:19 +01:00
|
|
|
* @cat Ajax
|
2006-12-22 15:40:46 +01:00
|
|
|
*/
|
2007-01-06 07:18:02 +01:00
|
|
|
ajaxSetup: function( settings ) {
|
|
|
|
jQuery.extend( jQuery.ajaxSettings, settings );
|
2006-08-17 06:18:32 +02:00
|
|
|
},
|
|
|
|
|
2006-12-22 14:56:36 +01:00
|
|
|
ajaxSettings: {
|
|
|
|
global: true,
|
|
|
|
type: "GET",
|
|
|
|
timeout: 0,
|
|
|
|
contentType: "application/x-www-form-urlencoded",
|
|
|
|
processData: true,
|
2007-01-14 23:51:55 +01:00
|
|
|
async: true,
|
|
|
|
data: null
|
2006-12-22 14:56:36 +01:00
|
|
|
},
|
2006-12-22 15:40:46 +01:00
|
|
|
|
|
|
|
// 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-12-15 10:13:24 +01:00
|
|
|
* Load a remote page using an HTTP request.
|
|
|
|
*
|
|
|
|
* This is jQuery's low-level AJAX implementation. See $.get, $.post etc. for
|
|
|
|
* higher-level abstractions.
|
2006-09-08 12:18:46 +02:00
|
|
|
*
|
2006-11-17 15:49:44 +01:00
|
|
|
* $.ajax() returns the XMLHttpRequest that it creates. In most cases you won't
|
|
|
|
* need that object to manipulate directly, but it is available if you need to
|
|
|
|
* abort the request manually.
|
|
|
|
*
|
2006-12-15 10:13:24 +01:00
|
|
|
* Note: Make sure the server sends the right mimetype (eg. xml as
|
2006-11-18 11:37:33 +01:00
|
|
|
* "text/xml"). Sending the wrong mimetype will get you into serious
|
|
|
|
* trouble that jQuery can't solve.
|
2006-09-08 12:18:46 +02:00
|
|
|
*
|
2006-12-15 10:13:24 +01:00
|
|
|
* Supported datatypes are (see dataType option):
|
2006-11-18 11:37:33 +01:00
|
|
|
*
|
|
|
|
* "xml": Returns a XML document that can be processed via jQuery.
|
|
|
|
*
|
|
|
|
* "html": Returns HTML as plain text, included script tags are evaluated.
|
|
|
|
*
|
|
|
|
* "script": Evaluates the response as Javascript and returns it as plain text.
|
|
|
|
*
|
|
|
|
* "json": Evaluates the response as JSON and returns a Javascript Object
|
|
|
|
*
|
2006-12-15 10:13:24 +01:00
|
|
|
* $.ajax() takes one argument, an object of key/value pairs, that are
|
|
|
|
* used to initalize and handle the request. These are all the key/values that can
|
|
|
|
* be used:
|
2006-09-08 12:18:46 +02:00
|
|
|
*
|
2006-12-15 10:13:24 +01:00
|
|
|
* (String) url - The URL to request.
|
2006-11-04 22:09:05 +01:00
|
|
|
*
|
2006-12-15 10:13:24 +01:00
|
|
|
* (String) type - The type of request to make ("POST" or "GET"), default is "GET".
|
2006-09-08 12:18:46 +02:00
|
|
|
*
|
|
|
|
* (String) dataType - The type of data that you're expecting back from
|
2006-11-18 11:37:33 +01:00
|
|
|
* the server. No default: If the server sends xml, the responseXML, otherwise
|
2006-12-15 10:13:24 +01:00
|
|
|
* the responseText is passed to the success callback.
|
2006-09-08 12:18:46 +02:00
|
|
|
*
|
2006-10-01 16:32:29 +02:00
|
|
|
* (Boolean) ifModified - Allow the request to be successful only if the
|
2006-12-15 10:13:24 +01:00
|
|
|
* response has changed since the last request. This is done by checking the
|
|
|
|
* Last-Modified header. Default value is false, ignoring the header.
|
2006-10-01 16:32:29 +02:00
|
|
|
*
|
2006-10-01 16:15:56 +02:00
|
|
|
* (Number) timeout - Local timeout to override global timeout, eg. to give a
|
2006-12-21 19:37:24 +01:00
|
|
|
* single request a longer timeout while all others timeout after 1 second.
|
2006-12-15 10:13:24 +01:00
|
|
|
* See $.ajaxTimeout() for global timeouts.
|
2006-10-01 16:15:56 +02:00
|
|
|
*
|
2006-12-20 12:25:15 +01:00
|
|
|
* (Boolean) global - Whether to trigger global AJAX event handlers for
|
2006-11-18 11:37:33 +01:00
|
|
|
* this request, default is true. Set to false to prevent that global handlers
|
2006-10-01 16:05:10 +02:00
|
|
|
* 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
|
2006-12-21 14:35:32 +01:00
|
|
|
* function gets passed tree arguments: The XMLHttpRequest object, a
|
|
|
|
* string describing the type of error that occurred and an optional
|
|
|
|
* exception object, if one occured.
|
2006-09-08 12:18:46 +02:00
|
|
|
*
|
|
|
|
* (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
|
2006-12-15 10:13:24 +01:00
|
|
|
* string describing the type of success of the request.
|
2006-09-08 12:18:46 +02:00
|
|
|
*
|
2006-11-28 12:36:54 +01:00
|
|
|
* (Object|String) data - Data to be sent to the server. Converted to a query
|
2006-11-17 10:56:30 +01:00
|
|
|
* string, if not already a string. Is appended to the url for GET-requests.
|
2006-12-15 10:13:24 +01:00
|
|
|
* See processData option to prevent this automatic processing.
|
2006-11-17 10:56:30 +01:00
|
|
|
*
|
2006-12-15 10:13:24 +01:00
|
|
|
* (String) contentType - When sending data to the server, use this content-type.
|
|
|
|
* Default is "application/x-www-form-urlencoded", which is fine for most cases.
|
2006-11-17 10:56:30 +01:00
|
|
|
*
|
2006-12-13 20:04:36 +01:00
|
|
|
* (Boolean) processData - By default, data passed in to the data option as an object
|
|
|
|
* other as string will be processed and transformed into a query string, fitting to
|
|
|
|
* the default content-type "application/x-www-form-urlencoded". If you want to send
|
|
|
|
* DOMDocuments, set this option to false.
|
2006-11-17 10:56:30 +01:00
|
|
|
*
|
2007-01-14 20:49:58 +01:00
|
|
|
* (Boolean) async - By default, all requests are sent asynchronous (set to true).
|
2006-11-17 11:15:31 +01:00
|
|
|
* If you need synchronous requests, set this option to false.
|
|
|
|
*
|
2006-12-05 23:58:27 +01:00
|
|
|
* (Function) beforeSend - A pre-callback to set custom headers etc., the
|
2006-12-04 20:37:49 +01:00
|
|
|
* XMLHttpRequest is passed as the only argument.
|
|
|
|
*
|
2006-09-08 12:18:46 +02:00
|
|
|
* @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-12-15 10:13:24 +01:00
|
|
|
* @example var html = $.ajax({
|
|
|
|
* url: "some.php",
|
|
|
|
* async: false
|
|
|
|
* }).responseText;
|
|
|
|
* @desc Loads data synchronously. Blocks the browser while the requests is active.
|
|
|
|
* It is better to block user interaction with others means when synchronization is
|
|
|
|
* necessary, instead to block the complete browser.
|
|
|
|
*
|
|
|
|
* @example var xmlDocument = [create xml document];
|
|
|
|
* $.ajax({
|
|
|
|
* url: "page.php",
|
|
|
|
* processData: false,
|
|
|
|
* data: xmlDocument,
|
|
|
|
* success: handleResponse
|
|
|
|
* });
|
|
|
|
* @desc Sends an xml document as data to the server. By setting the processData
|
|
|
|
* option to false, the automatic conversion of data to strings is prevented.
|
|
|
|
*
|
2006-09-08 12:18:46 +02:00
|
|
|
* @name $.ajax
|
2006-11-17 15:49:44 +01:00
|
|
|
* @type XMLHttpRequest
|
2007-01-04 11:03:34 +01:00
|
|
|
* @param Map properties Key/value pairs to initialize the request with.
|
2007-01-07 10:20:19 +01:00
|
|
|
* @cat Ajax
|
2007-01-04 11:03:34 +01:00
|
|
|
* @see ajaxSetup(Map)
|
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-12-22 14:56:36 +01:00
|
|
|
s = jQuery.extend({}, jQuery.ajaxSettings, s);
|
2006-11-03 12:30:57 +01:00
|
|
|
|
2006-11-11 12:34:51 +01:00
|
|
|
// if data available
|
|
|
|
if ( s.data ) {
|
|
|
|
// convert data if not already a string
|
2007-01-14 07:02:56 +01:00
|
|
|
if (s.processData && typeof s.data != "string")
|
2006-11-13 11:37:42 +01:00
|
|
|
s.data = jQuery.param(s.data);
|
2006-11-11 12:34:51 +01:00
|
|
|
// append data to url for get requests
|
2007-01-31 22:14:33 +01:00
|
|
|
if( s.type.toLowerCase() == "get" ) {
|
2006-11-11 12:34:51 +01:00
|
|
|
// "?" + data or "&" + data (in case there are already params)
|
|
|
|
s.url += ((s.url.indexOf("?") > -1) ? "&" : "?") + s.data;
|
2007-01-31 22:14:33 +01:00
|
|
|
// IE likes to send both get and post data, prevent this
|
|
|
|
s.data = null;
|
|
|
|
}
|
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-17 11:15:31 +01:00
|
|
|
xml.open(s.type, s.url, s.async);
|
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-11-17 10:56:30 +01:00
|
|
|
xml.setRequestHeader("Content-Type", s.contentType);
|
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-12-04 20:37:49 +01:00
|
|
|
|
|
|
|
// Allow custom headers/mimetypes
|
2006-12-05 23:58:27 +01:00
|
|
|
if( s.beforeSend )
|
|
|
|
s.beforeSend(xml);
|
2007-01-06 07:18:02 +01:00
|
|
|
|
|
|
|
if ( s.global )
|
2006-12-11 09:53:33 +01:00
|
|
|
jQuery.event.trigger("ajaxSend", [xml, s]);
|
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-12-21 14:35:32 +01:00
|
|
|
var status;
|
|
|
|
try {
|
|
|
|
status = jQuery.httpSuccess( xml ) && isTimeout != "timeout" ?
|
|
|
|
s.ifModified && jQuery.httpNotModified( xml, s.url ) ? "notmodified" : "success" : "error";
|
|
|
|
// Make sure that the request was successful or notmodified
|
|
|
|
if ( status != "error" ) {
|
|
|
|
// Cache Last-Modified header, if ifModified mode.
|
|
|
|
var modRes;
|
|
|
|
try {
|
|
|
|
modRes = xml.getResponseHeader("Last-Modified");
|
|
|
|
} catch(e) {} // swallow exception thrown by FF if header is not available
|
|
|
|
|
|
|
|
if ( s.ifModified && modRes )
|
|
|
|
jQuery.lastModified[s.url] = modRes;
|
|
|
|
|
|
|
|
// process the data (runs the xml through httpData regardless of callback)
|
|
|
|
var data = jQuery.httpData( xml, s.dataType );
|
|
|
|
|
|
|
|
// If a local callback was specified, fire it and pass it the data
|
|
|
|
if ( s.success )
|
|
|
|
s.success( data, status );
|
|
|
|
|
|
|
|
// Fire the global callback
|
|
|
|
if( s.global )
|
|
|
|
jQuery.event.trigger( "ajaxSuccess", [xml, s] );
|
2007-01-06 07:18:02 +01:00
|
|
|
} else
|
2006-12-21 16:23:59 +01:00
|
|
|
jQuery.handleError(s, xml, status);
|
2006-12-21 14:35:32 +01:00
|
|
|
} catch(e) {
|
|
|
|
status = "error";
|
|
|
|
jQuery.handleError(s, xml, status, e);
|
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-12-11 09:53:33 +01:00
|
|
|
jQuery.event.trigger( "ajaxComplete", [xml, s] );
|
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
|
2007-01-06 07:18:02 +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-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
|
2007-01-06 07:18:02 +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
|
2007-01-06 07:18:02 +01:00
|
|
|
if ( xml ) {
|
2006-08-17 06:18:32 +02:00
|
|
|
// Cancel the request
|
|
|
|
xml.abort();
|
|
|
|
|
2006-12-22 14:56:36 +01:00
|
|
|
if( !requestDone )
|
|
|
|
onreadystatechange( "timeout" );
|
2006-08-17 06:18:32 +02:00
|
|
|
}
|
2006-11-03 12:30:57 +01:00
|
|
|
}, s.timeout);
|
2006-12-15 10:13:24 +01:00
|
|
|
|
|
|
|
// save non-leaking reference
|
|
|
|
var xml2 = xml;
|
2006-11-04 22:09:05 +01:00
|
|
|
|
2006-07-10 05:20:56 +02:00
|
|
|
// Send the data
|
2006-12-21 14:35:32 +01:00
|
|
|
try {
|
|
|
|
xml2.send(s.data);
|
|
|
|
} catch(e) {
|
|
|
|
jQuery.handleError(s, xml, null, e);
|
|
|
|
}
|
2006-11-17 15:49:44 +01:00
|
|
|
|
2006-12-29 14:49:28 +01:00
|
|
|
// firefox 1.5 doesn't fire statechange for sync requests
|
2007-01-06 07:18:02 +01:00
|
|
|
if ( !s.async )
|
2006-12-29 14:49:28 +01:00
|
|
|
onreadystatechange();
|
|
|
|
|
2006-11-17 15:49:44 +01:00
|
|
|
// return XMLHttpRequest to allow aborting the request etc.
|
2006-12-15 10:13:24 +01:00
|
|
|
return xml2;
|
2006-07-10 05:20:56 +02:00
|
|
|
},
|
2006-11-04 22:09:05 +01:00
|
|
|
|
2007-01-06 07:18:02 +01:00
|
|
|
handleError: function( s, xml, status, e ) {
|
2006-12-21 14:35:32 +01:00
|
|
|
// If a local callback was specified, fire it
|
|
|
|
if ( s.error ) s.error( xml, status, e );
|
|
|
|
|
|
|
|
// Fire the global callback
|
2007-01-06 07:18:02 +01:00
|
|
|
if ( s.global )
|
2006-12-21 14:35:32 +01:00
|
|
|
jQuery.event.trigger( "ajaxError", [xml, s, e] );
|
|
|
|
},
|
|
|
|
|
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
|
2007-01-06 07:18:02 +01:00
|
|
|
httpSuccess: function( r ) {
|
2006-12-21 16:23:59 +01:00
|
|
|
try {
|
|
|
|
return !r.status && location.protocol == "file:" ||
|
|
|
|
( r.status >= 200 && r.status < 300 ) || r.status == 304 ||
|
|
|
|
jQuery.browser.safari && r.status == undefined;
|
|
|
|
} catch(e){}
|
|
|
|
return false;
|
2006-08-17 06:18:32 +02:00
|
|
|
},
|
|
|
|
|
|
|
|
// Determines if an XMLHttpRequest returns NotModified
|
2007-01-06 07:18:02 +01:00
|
|
|
httpNotModified: function( xml, url ) {
|
2006-12-21 16:23:59 +01:00
|
|
|
try {
|
|
|
|
var xmlRes = xml.getResponseHeader("Last-Modified");
|
2006-08-17 06:18:32 +02:00
|
|
|
|
2006-12-21 16:23:59 +01:00
|
|
|
// Firefox always returns 200. check Last-Modified date
|
|
|
|
return xml.status == 304 || xmlRes == jQuery.lastModified[url] ||
|
|
|
|
jQuery.browser.safari && xml.status == undefined;
|
|
|
|
} catch(e){}
|
|
|
|
return false;
|
2006-07-10 05:20:56 +02:00
|
|
|
},
|
2006-11-04 22:09:05 +01:00
|
|
|
|
2006-09-08 12:18:46 +02:00
|
|
|
/* Get the data out of an XMLHttpRequest.
|
|
|
|
* 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")
|
|
|
|
*/
|
2007-01-06 07:18:02 +01:00
|
|
|
httpData: function( r, type ) {
|
2006-07-10 05:20:56 +02:00
|
|
|
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
|
|
|
|
2006-11-21 10:21:38 +01:00
|
|
|
// If the type is "script", eval it in global context
|
2007-01-06 07:18:02 +01:00
|
|
|
if ( type == "script" )
|
2006-12-02 14:43:02 +01:00
|
|
|
jQuery.globalEval( data );
|
2006-08-17 06:18:32 +02:00
|
|
|
|
2006-08-31 08:32:27 +02:00
|
|
|
// Get the JavaScript object, if JSON is used.
|
2007-01-06 07:18:02 +01:00
|
|
|
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
|
2007-01-06 07:18:02 +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
|
2007-01-06 07:18:02 +01:00
|
|
|
param: function( a ) {
|
2006-07-10 05:20:56 +02:00
|
|
|
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
|
2007-01-06 07:18:02 +01:00
|
|
|
if ( a.constructor == Array || a.jquery )
|
2006-07-10 05:20:56 +02:00
|
|
|
// Serialize the form elements
|
2007-01-14 22:49:59 +01:00
|
|
|
jQuery.each( a, function(){
|
|
|
|
s.push( encodeURIComponent(this.name) + "=" + encodeURIComponent( this.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
|
2007-01-06 07:18:02 +01:00
|
|
|
else
|
2006-07-10 05:20:56 +02:00
|
|
|
// Serialize the key/values
|
2007-01-06 07:18:02 +01:00
|
|
|
for ( var j in a )
|
2006-11-30 21:52:24 +01:00
|
|
|
// If the value is an array then the key names need to be repeated
|
2007-01-20 05:04:02 +01:00
|
|
|
if ( a[j] && a[j].constructor == Array )
|
2007-01-14 22:49:59 +01:00
|
|
|
jQuery.each( a[j], function(){
|
|
|
|
s.push( encodeURIComponent(j) + "=" + encodeURIComponent( this ) );
|
|
|
|
});
|
2007-01-06 07:18:02 +01:00
|
|
|
else
|
2007-01-07 21:56:17 +01:00
|
|
|
s.push( encodeURIComponent(j) + "=" + encodeURIComponent( a[j] ) );
|
2006-11-04 22:09:05 +01:00
|
|
|
|
2006-07-10 05:20:56 +02:00
|
|
|
// Return the resulting serialization
|
|
|
|
return s.join("&");
|
2006-11-21 10:55:34 +01:00
|
|
|
},
|
|
|
|
|
2006-12-02 14:43:02 +01:00
|
|
|
// evalulates a script in global context
|
|
|
|
// not reliable for safari
|
2007-01-06 07:18:02 +01:00
|
|
|
globalEval: function( data ) {
|
|
|
|
if ( window.execScript )
|
2006-11-21 10:55:34 +01:00
|
|
|
window.execScript( data );
|
2007-01-06 07:18:02 +01:00
|
|
|
else if ( jQuery.browser.safari )
|
2006-12-02 14:43:02 +01:00
|
|
|
// safari doesn't provide a synchronous global eval
|
|
|
|
window.setTimeout( data, 0 );
|
2006-11-21 10:55:34 +01:00
|
|
|
else
|
|
|
|
eval.call( window, data );
|
2006-07-10 05:20:56 +02:00
|
|
|
}
|
|
|
|
|
|
|
|
});
|