X-Git-Url: http://git.asbjorn.it/?a=blobdiff_plain;f=src%2Fajax%2Fajax.js;h=4cc2962cbc5faa5cbb9228112be33eec4c16bc3a;hb=785de349f5d31d8ecb75c6842b3b9d63e90a433d;hp=cca207417e88b0890abe3020f6d557aad21ddb53;hpb=e94db76ada82c6a00d557e4452738bb3a81229b7;p=jquery.git diff --git a/src/ajax/ajax.js b/src/ajax/ajax.js index cca2074..4cc2962 100644 --- a/src/ajax/ajax.js +++ b/src/ajax/ajax.js @@ -95,8 +95,12 @@ jQuery.fn.extend({ }, /** - * A function for serializing a set of input elements into - * a string of data. + * Serializes a set of input elements into a string of data. + * This will serialize all given elements. If you need + * 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. * * @example $("input[@type=text]").serialize(); * @before @@ -104,8 +108,9 @@ jQuery.fn.extend({ * @after name=John&location=Boston * @desc Serialize a selection of input elements to a string * - * @test var data = $(':input').serialize(); - * ok( data == 'action=Test&text2=Test&radio1=on&radio2=on&check=on&=on&hidden=&foo[bar]=&name=name&button=&=foobar&select1=&select2=3&select3=1', 'Check form serialization as query string' ); + * @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' ); * * @name serialize * @type String @@ -216,21 +221,26 @@ if ( jQuery.browser.msie && typeof XMLHttpRequest == "undefined" ) * ok( counter.error == 2, 'Check failed request' ); * ok( counter.success == 0, 'Check failed request' ); * ok( counter.complete == 3, 'Check failed request' ); - * counter.error = 0; counter.success = 0; counter.complete = 0; - * $.ajaxTimeout(0); - * $.ajax({url: "data/name.php?wait=5", 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 failedrequest without globals' ); - * ok( counter.success == 0, 'Check failed request without globals' ); - * ok( counter.complete == 0, 'Check failed request without globals' ); - * start(); - * }}); - * }}); + * start(); + * }}); + * }}); + + * @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(); * }}); * }}); * @@ -298,7 +308,8 @@ jQuery.extend({ data = null; } - if ( data ) url += "?" + jQuery.param(data); + // append ? + data or & + data, in case there are already params + if ( data ) url += ((url.indexOf("?") > -1) ? "&" : "?") + jQuery.param(data); // Build and start the HTTP Request jQuery.ajax( "GET", url, null, function(r, status) { @@ -537,6 +548,10 @@ jQuery.extend({ * (String) dataType - The type of data that you're expecting back from * the server (e.g. "xml", "html", "script", or "json"). * + * (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 + * * (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 @@ -610,6 +625,7 @@ jQuery.extend({ var dataType = type.dataType; var global = typeof type.global == "boolean" ? type.global : true; var timeout = typeof type.timeout == "number" ? type.timeout : jQuery.timeout; + var ifModified = type.ifModified || false; data = type.data; url = type.url; type = type.type; @@ -655,8 +671,13 @@ jQuery.extend({ // 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; + var modRes; + try { + modRes = xml.getResponseHeader("Last-Modified"); + } catch(e) {} // swallow exception thrown by FF if header is not available + + if ( ifModified && modRes ) + jQuery.lastModified[url] = modRes; // If a local callback was specified, fire it if ( success )