X-Git-Url: http://git.asbjorn.it/?a=blobdiff_plain;f=src%2Fajax%2Fajax.js;h=9042a48d5df88952e50fc81ef3f23d3863cb881c;hb=e6ffe025033f82d752ec4966c6b12c49d8e1dc29;hp=b872481abf6046b90a2b86e3a3e30adf87cf39e2;hpb=27c08b65446568b700606e837a85630d3634f25f;p=jquery.git
diff --git a/src/ajax/ajax.js b/src/ajax/ajax.js
index b872481..9042a48 100644
--- a/src/ajax/ajax.js
+++ b/src/ajax/ajax.js
@@ -94,13 +94,14 @@ jQuery.fn.extend({
* 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
+ * provided by the [http://www.malsup.com/jquery/form/ Form Plugin].
+ * It also takes multiple-selects
* into account, while this method recognizes only a single option.
*
* @example $("input[@type=text]").serialize();
* @before
*
- * @after name=John&location=Boston
+ * @after name=John&location=Boston
* @desc Serialize a selection of input elements to a string
*
* @name serialize
@@ -249,6 +250,13 @@ jQuery.extend({
/**
* Load a remote page using an HTTP GET request.
*
+ * This is an easy way to send a simple GET request to a server
+ * without having to use the more complex $.ajax function. It
+ * allows a single callback function to be specified that will
+ * be executed when the request is complete (and only if the response
+ * has a successful response code). If you need to have both error
+ * and success callbacks, you may want to use $.ajax.
+ *
* @example $.get("test.cgi");
*
* @example $.get("test.cgi", { name: "John", time: "2pm" } );
@@ -268,7 +276,7 @@ jQuery.extend({
* @type XMLHttpRequest
* @param String url The URL of the page to load.
* @param Map params (optional) Key/value pairs that will be sent to the server.
- * @param Function callback (optional) A function to be executed whenever the data is loaded.
+ * @param Function callback (optional) A function to be executed whenever the data is loaded successfully.
* @cat Ajax
*/
get: function( url, data, callback, type, ifModified ) {
@@ -279,6 +287,7 @@ jQuery.extend({
}
return jQuery.ajax({
+ type: "GET",
url: url,
data: data,
success: callback,
@@ -310,7 +319,7 @@ jQuery.extend({
* @type XMLHttpRequest
* @param String url The URL of the page to load.
* @param Map params (optional) Key/value pairs that will be sent to the server.
- * @param Function callback (optional) A function to be executed whenever the data is loaded.
+ * @param Function callback (optional) A function to be executed whenever the data is loaded successfully.
* @cat Ajax
*/
getIfModified: function( url, data, callback, type ) {
@@ -320,7 +329,7 @@ jQuery.extend({
/**
* Loads, and executes, a remote JavaScript file using an HTTP GET request.
*
- * Warning: Safari <= 2.0.x is unable to evalulate scripts in a global
+ * Warning: Safari <= 2.0.x is unable to evaluate scripts in a global
* context synchronously. If you load functions via getScript, make sure
* to call them after a delay.
*
@@ -333,7 +342,7 @@ jQuery.extend({
* @name $.getScript
* @type XMLHttpRequest
* @param String url The URL of the page to load.
- * @param Function callback (optional) A function to be executed whenever the data is loaded.
+ * @param Function callback (optional) A function to be executed whenever the data is loaded successfully.
* @cat Ajax
*/
getScript: function( url, callback ) {
@@ -358,7 +367,7 @@ jQuery.extend({
* @type XMLHttpRequest
* @param String url The URL of the page to load.
* @param Map params (optional) Key/value pairs that will be sent to the server.
- * @param Function callback A function to be executed whenever the data is loaded.
+ * @param Function callback A function to be executed whenever the data is loaded successfully.
* @cat Ajax
*/
getJSON: function( url, data, callback ) {
@@ -387,10 +396,15 @@ jQuery.extend({
* @type XMLHttpRequest
* @param String url The URL of the page to load.
* @param Map params (optional) Key/value pairs that will be sent to the server.
- * @param Function callback (optional) A function to be executed whenever the data is loaded.
+ * @param Function callback (optional) A function to be executed whenever the data is loaded successfully.
* @cat Ajax
*/
post: function( url, data, callback, type ) {
+ if ( jQuery.isFunction( data ) ) {
+ callback = data;
+ data = {};
+ }
+
return jQuery.ajax({
type: "POST",
url: url,
@@ -404,7 +418,7 @@ jQuery.extend({
//timeout: 0,
/**
- * Set the timeout of all AJAX requests to a specific amount of time.
+ * Set the timeout in milliseconds of all AJAX requests to a specific amount of time.
* This will make all future AJAX requests timeout after a specified amount
* of time.
*
@@ -420,7 +434,7 @@ jQuery.extend({
*
* @name $.ajaxTimeout
* @type undefined
- * @param Number time How long before an AJAX request times out.
+ * @param Number time How long before an AJAX request times out, in milliseconds.
* @cat Ajax
*/
ajaxTimeout: function( timeout ) {
@@ -468,15 +482,17 @@ jQuery.extend({
* Load a remote page using an HTTP request.
*
* This is jQuery's low-level AJAX implementation. See $.get, $.post etc. for
- * higher-level abstractions.
+ * higher-level abstractions that are often easier to understand and use,
+ * but don't offer as much functionality (such as error callbacks).
*
* $.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.
*
- * Note: Make sure the server sends the right mimetype (eg. xml as
- * "text/xml"). Sending the wrong mimetype will get you into serious
- * trouble that jQuery can't solve.
+ * '''Note:''' If you specify the dataType option described below, make sure
+ * the server sends the correct MIME type in the response (eg. xml as "text/xml").
+ * Sending the wrong MIME type can lead to unexpected problems in your script.
+ * See [[Specifying the Data Type for AJAX Requests]] for more information.
*
* Supported datatypes are (see dataType option):
*
@@ -504,7 +520,7 @@ jQuery.extend({
* response has changed since the last request. This is done by checking the
* Last-Modified header. Default value is false, ignoring the header.
*
- * (Number) timeout - Local timeout to override global timeout, eg. to give a
+ * (Number) timeout - Local timeout in milliseconds to override global timeout, eg. to give a
* single request a longer timeout while all others timeout after 1 second.
* See $.ajaxTimeout() for global timeouts.
*
@@ -565,8 +581,8 @@ jQuery.extend({
* 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.
+ * It is better to block user interaction by other means when synchronization is
+ * necessary.
*
* @example var xmlDocument = [create xml document];
* $.ajax({
@@ -594,9 +610,12 @@ jQuery.extend({
if (s.processData && typeof s.data != "string")
s.data = jQuery.param(s.data);
// append data to url for get requests
- if( s.type.toLowerCase() == "get" )
+ if( s.type.toLowerCase() == "get" ) {
// "?" + data or "&" + data (in case there are already params)
s.url += ((s.url.indexOf("?") > -1) ? "&" : "?") + s.data;
+ // IE likes to send both get and post data, prevent this
+ s.data = null;
+ }
}
// Watch for a new set of requests
@@ -639,6 +658,13 @@ jQuery.extend({
// The transfer is complete and the data is available, or the request timed out
if ( xml && (xml.readyState == 4 || isTimeout == "timeout") ) {
requestDone = true;
+
+ // clear poll interval
+ if (ival) {
+ clearInterval(ival);
+ ival = null;
+ }
+
var status;
try {
status = jQuery.httpSuccess( xml ) && isTimeout != "timeout" ?
@@ -684,11 +710,13 @@ jQuery.extend({
s.complete(xml, status);
// Stop memory leaks
- xml.onreadystatechange = function(){};
- xml = null;
+ if(s.async)
+ xml = null;
}
};
- xml.onreadystatechange = onreadystatechange;
+
+ // don't attach the handler to the request, just poll it instead
+ var ival = setInterval(onreadystatechange, 13);
// Timeout checker
if ( s.timeout > 0 )
@@ -703,12 +731,9 @@ jQuery.extend({
}
}, s.timeout);
- // save non-leaking reference
- var xml2 = xml;
-
// Send the data
try {
- xml2.send(s.data);
+ xml.send(s.data);
} catch(e) {
jQuery.handleError(s, xml, null, e);
}
@@ -718,7 +743,7 @@ jQuery.extend({
onreadystatechange();
// return XMLHttpRequest to allow aborting the request etc.
- return xml2;
+ return xml;
},
handleError: function( s, xml, status, e ) {