2006-03-22 04:33:07 +01:00
|
|
|
// AJAX Plugin
|
|
|
|
// Docs Here:
|
|
|
|
// http://jquery.com/docs/ajax/
|
|
|
|
|
2006-06-19 03:29:54 +02:00
|
|
|
/**
|
2006-09-01 08:50:35 +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"></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.
|
|
|
|
* @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-06-19 03:29:54 +02:00
|
|
|
*/
|
2006-08-17 06:18:32 +02:00
|
|
|
jQuery.fn.loadIfModified = function( url, params, callback ) {
|
|
|
|
this.load( url, params, callback, 1 );
|
|
|
|
};
|
|
|
|
|
2006-09-01 08:50:35 +02:00
|
|
|
/**
|
|
|
|
* Load HTML from a remote file and inject it into the DOM.
|
|
|
|
*
|
|
|
|
* @example $("#feeds").load("feeds.html")
|
|
|
|
* @before <div id="feeds"></div>
|
|
|
|
* @result <div id="feeds"><b>45</b> feeds found.</div>
|
|
|
|
*
|
|
|
|
* @name load
|
|
|
|
* @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
|
|
|
|
*/
|
2006-08-17 06:18:32 +02:00
|
|
|
jQuery.fn.load = function( url, params, callback, ifModified ) {
|
|
|
|
if ( url.constructor == Function )
|
2006-06-19 03:29:54 +02:00
|
|
|
return this.bind("load", url);
|
|
|
|
|
2006-08-17 06:18:32 +02:00
|
|
|
callback = callback || function(){};
|
|
|
|
|
2006-06-19 03:29:54 +02:00
|
|
|
// Default to a GET request
|
|
|
|
var type = "GET";
|
|
|
|
|
|
|
|
// 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;
|
|
|
|
|
|
|
|
// Otherwise, build a param string
|
|
|
|
} else {
|
2006-06-22 22:14:41 +02:00
|
|
|
params = jQuery.param( params );
|
2006-06-19 03:29:54 +02:00
|
|
|
type = "POST";
|
|
|
|
}
|
2006-03-23 22:13:20 +01:00
|
|
|
}
|
2006-06-19 03:29:54 +02:00
|
|
|
|
2006-03-23 22:13:20 +01:00
|
|
|
var self = this;
|
2006-06-19 03:29:54 +02:00
|
|
|
|
|
|
|
// Request the remote document
|
2006-08-17 06:18:32 +02:00
|
|
|
jQuery.ajax( type, url, params,function(res, status){
|
2006-06-19 03:29:54 +02:00
|
|
|
|
2006-08-17 06:18:32 +02:00
|
|
|
if ( status == "success" || !ifModified && status == "notmodified" ) {
|
|
|
|
// Inject the HTML into all the matched elements
|
|
|
|
self.html(res.responseText).each( callback, [res.responseText, status] );
|
|
|
|
|
|
|
|
// Execute all the scripts inside of the newly-injected HTML
|
|
|
|
$("script", self).each(function(){
|
|
|
|
if ( this.src )
|
|
|
|
$.getScript( this.src );
|
|
|
|
else
|
|
|
|
eval.call( window, this.text || this.textContent || this.innerHTML || "" );
|
|
|
|
});
|
|
|
|
} else
|
|
|
|
callback.apply( self, [res.responseText, status] );
|
2006-06-08 19:31:57 +02:00
|
|
|
|
2006-08-17 06:18:32 +02:00
|
|
|
}, ifModified);
|
2006-06-19 03:29:54 +02:00
|
|
|
|
2006-03-23 22:13:20 +01:00
|
|
|
return this;
|
2006-03-22 04:33:07 +01:00
|
|
|
};
|
2006-05-16 18:18:52 +02:00
|
|
|
|
2006-09-08 12:18:46 +02:00
|
|
|
/**
|
|
|
|
* A function for serializing a set of input elements into
|
|
|
|
* a string of data.
|
|
|
|
*
|
|
|
|
* @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
|
|
|
|
* @cat AJAX
|
|
|
|
*/
|
|
|
|
jQuery.fn.serialize = function(){
|
|
|
|
return $.param( this );
|
|
|
|
};
|
|
|
|
|
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
|
|
|
|
*/
|
|
|
|
|
|
|
|
/**
|
|
|
|
* 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
|
|
|
|
*/
|
|
|
|
|
|
|
|
/**
|
|
|
|
* 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
|
|
|
|
*/
|
|
|
|
|
|
|
|
/**
|
|
|
|
* 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
|
|
|
|
*/
|
|
|
|
|
|
|
|
/**
|
|
|
|
* 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-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-06-19 03:29:54 +02: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
|
|
|
* )
|
|
|
|
*
|
|
|
|
* @name $.get
|
|
|
|
* @type jQuery
|
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-07-10 05:20:56 +02:00
|
|
|
if ( 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-08-17 06:18:32 +02:00
|
|
|
if ( data ) url += "?" + jQuery.param(data);
|
2006-07-10 05:20:56 +02:00
|
|
|
|
|
|
|
// Build and start the HTTP Request
|
2006-08-17 06:18:32 +02:00
|
|
|
jQuery.ajax( "GET", url, null, function(r, status) {
|
|
|
|
if ( callback ) callback( jQuery.httpData(r,type), status );
|
|
|
|
}, ifModified);
|
|
|
|
},
|
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
|
|
|
*
|
|
|
|
* @name $.getIfModified
|
|
|
|
* @type jQuery
|
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-08 12:18:46 +02:00
|
|
|
*
|
|
|
|
* @name $.getScript
|
2006-09-01 08:50:35 +02:00
|
|
|
* @type jQuery
|
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-08 12:18:46 +02:00
|
|
|
getScript: function( url, data, callback ) {
|
|
|
|
jQuery.get(url, data, callback, "script");
|
|
|
|
},
|
|
|
|
|
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-08 12:18:46 +02:00
|
|
|
* @name $.getJSON
|
2006-09-01 08:50:35 +02:00
|
|
|
* @type jQuery
|
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 ) {
|
|
|
|
jQuery.get(url, data, callback, "json");
|
2006-07-10 05:20:56 +02:00
|
|
|
},
|
2006-06-19 03:29:54 +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 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);
|
|
|
|
* }
|
|
|
|
* )
|
|
|
|
*
|
|
|
|
* @name $.post
|
|
|
|
* @type jQuery
|
|
|
|
* @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 ) {
|
|
|
|
// Build and start the HTTP Request
|
2006-08-17 06:18:32 +02:00
|
|
|
jQuery.ajax( "POST", url, jQuery.param(data), function(r, status) {
|
|
|
|
if ( callback ) callback( jQuery.httpData(r,type), status );
|
2006-07-10 05:20:56 +02: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.
|
|
|
|
*
|
|
|
|
* @name $.ajaxTimeout
|
|
|
|
* @type jQuery
|
|
|
|
* @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-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.
|
|
|
|
*
|
|
|
|
* (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").
|
|
|
|
*
|
|
|
|
* (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.
|
|
|
|
*
|
|
|
|
* @name $.ajax
|
|
|
|
* @type jQuery
|
|
|
|
* @param Hash prop A set of properties to initialize the request with.
|
|
|
|
* @cat AJAX
|
2006-07-10 05:20:56 +02:00
|
|
|
*/
|
2006-08-17 06:18:32 +02:00
|
|
|
ajax: function( type, url, data, ret, ifModified ) {
|
2006-07-10 05:20:56 +02:00
|
|
|
// If only a single argument was passed in,
|
|
|
|
// assume that it is a object of key/value pairs
|
|
|
|
if ( !url ) {
|
|
|
|
ret = type.complete;
|
|
|
|
var success = type.success;
|
|
|
|
var error = type.error;
|
2006-09-08 12:18:46 +02:00
|
|
|
var dataType = type.dataType;
|
2006-07-10 05:20:56 +02:00
|
|
|
data = type.data;
|
|
|
|
url = type.url;
|
|
|
|
type = type.type;
|
|
|
|
}
|
|
|
|
|
|
|
|
// Watch for a new set of requests
|
|
|
|
if ( ! jQuery.active++ )
|
|
|
|
jQuery.event.trigger( "ajaxStart" );
|
2006-08-22 09:32:25 +02:00
|
|
|
|
|
|
|
var requestDone = false;
|
2006-07-10 05:20:56 +02:00
|
|
|
|
|
|
|
// Create the request object
|
|
|
|
var xml = new XMLHttpRequest();
|
|
|
|
|
|
|
|
// Open the socket
|
|
|
|
xml.open(type || "GET", url, true);
|
|
|
|
|
|
|
|
// Set the correct header, if data is being sent
|
|
|
|
if ( data )
|
|
|
|
xml.setRequestHeader("Content-Type", "application/x-www-form-urlencoded");
|
2006-08-17 06:18:32 +02:00
|
|
|
|
|
|
|
// Set the If-Modified-Since header, if ifModified mode.
|
|
|
|
if ( ifModified )
|
|
|
|
xml.setRequestHeader("If-Modified-Since",
|
|
|
|
jQuery.lastModified[url] || "Thu, 01 Jan 1970 00:00:00 GMT" );
|
|
|
|
|
2006-07-10 05:20:56 +02:00
|
|
|
// Set header so calling script knows that it's an XMLHttpRequest
|
|
|
|
xml.setRequestHeader("X-Requested-With", "XMLHttpRequest");
|
|
|
|
|
|
|
|
// Make sure the browser sends the right content length
|
|
|
|
if ( xml.overrideMimeType )
|
|
|
|
xml.setRequestHeader("Connection", "close");
|
2006-08-17 06:18:32 +02:00
|
|
|
|
2006-07-10 05:20:56 +02:00
|
|
|
// Wait for a response to come back
|
2006-08-17 06:18:32 +02:00
|
|
|
var onreadystatechange = function(istimeout){
|
|
|
|
// The transfer is complete and the data is available, or the request timed out
|
2006-08-22 09:32:25 +02:00
|
|
|
if ( xml && (xml.readyState == 4 || istimeout == "timeout") ) {
|
|
|
|
requestDone = true;
|
|
|
|
|
|
|
|
var status = jQuery.httpSuccess( xml ) && istimeout != "timeout" ?
|
2006-08-17 06:18:32 +02:00
|
|
|
ifModified && jQuery.httpNotModified( xml, url ) ? "notmodified" : "success" : "error";
|
2006-06-19 03:29:54 +02: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.
|
|
|
|
var modRes = xml.getResponseHeader("Last-Modified");
|
|
|
|
if ( ifModified && modRes ) jQuery.lastModified[url] = modRes;
|
|
|
|
|
2006-07-10 05:20:56 +02:00
|
|
|
// If a local callback was specified, fire it
|
2006-09-08 12:18:46 +02:00
|
|
|
if ( success )
|
|
|
|
success( jQuery.httpData( xml, dataType ), status );
|
2006-07-10 05:20:56 +02:00
|
|
|
|
|
|
|
// Fire the global callback
|
|
|
|
jQuery.event.trigger( "ajaxSuccess" );
|
2006-06-19 03:29:54 +02: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-08-17 06:18:32 +02:00
|
|
|
if ( error ) error( xml, status );
|
2006-07-10 05:20:56 +02:00
|
|
|
|
|
|
|
// Fire the global callback
|
|
|
|
jQuery.event.trigger( "ajaxError" );
|
|
|
|
}
|
|
|
|
|
|
|
|
// The request was completed
|
|
|
|
jQuery.event.trigger( "ajaxComplete" );
|
|
|
|
|
|
|
|
// Handle the global AJAX counter
|
|
|
|
if ( ! --jQuery.active )
|
|
|
|
jQuery.event.trigger( "ajaxStop" );
|
|
|
|
|
|
|
|
// Process result
|
2006-08-17 06:18:32 +02:00
|
|
|
if ( ret ) ret(xml, status);
|
|
|
|
|
2006-07-17 06:57:07 +02:00
|
|
|
// Stop memory leaks
|
|
|
|
xml.onreadystatechange = function(){};
|
|
|
|
xml = null;
|
2006-08-17 06:18:32 +02: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;
|
|
|
|
|
|
|
|
// Timeout checker
|
|
|
|
if(jQuery.timeout > 0)
|
|
|
|
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;
|
|
|
|
}
|
|
|
|
}, jQuery.timeout);
|
|
|
|
|
2006-07-10 05:20:56 +02:00
|
|
|
// Send the data
|
|
|
|
xml.send(data);
|
|
|
|
},
|
|
|
|
|
|
|
|
// Counter for holding the number of active queries
|
|
|
|
active: 0,
|
|
|
|
|
|
|
|
// 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-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")
|
|
|
|
*/
|
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-08-17 06:18:32 +02:00
|
|
|
return data;
|
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-06-19 03:29:54 +02: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 ) );
|
|
|
|
|
|
|
|
// 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-07-10 05:20:56 +02:00
|
|
|
|
|
|
|
// Return the resulting serialization
|
|
|
|
return s.join("&");
|
|
|
|
}
|
|
|
|
|
|
|
|
});
|