From e94db76ada82c6a00d557e4452738bb3a81229b7 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?J=C3=B6rn=20Zaefferer?= Date: Sun, 1 Oct 2006 14:15:56 +0000 Subject: [PATCH] Added local timeout option for $.ajax + test --- src/ajax/ajax.js | 26 ++++++++++++++++++++++++-- 1 file changed, 24 insertions(+), 2 deletions(-) diff --git a/src/ajax/ajax.js b/src/ajax/ajax.js index 07d69b40..cca20741 100644 --- a/src/ajax/ajax.js +++ b/src/ajax/ajax.js @@ -476,6 +476,7 @@ jQuery.extend({ * if(passed == 2) { * ok( true, 'Check local and global callbacks after timeout' ); * clearTimeout(timeout); + * $('#main').unbind("ajaxError"); * start(); * } * }; @@ -492,6 +493,22 @@ jQuery.extend({ * success: fail * }); * + * @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(); + * } + * }); + * + * * @name $.ajaxTimeout * @type jQuery * @param Number time How long before an AJAX request times out. @@ -520,6 +537,10 @@ jQuery.extend({ * (String) dataType - The type of data that you're expecting back from * the server (e.g. "xml", "html", "script", or "json"). * + * (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 + * * (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. @@ -588,6 +609,7 @@ jQuery.extend({ var error = type.error; var dataType = type.dataType; var global = typeof type.global == "boolean" ? type.global : true; + var timeout = typeof type.timeout == "number" ? type.timeout : jQuery.timeout; data = type.data; url = type.url; type = type.type; @@ -674,7 +696,7 @@ jQuery.extend({ xml.onreadystatechange = onreadystatechange; // Timeout checker - if(jQuery.timeout > 0) + if(timeout > 0) setTimeout(function(){ // Check to see if the request is still happening if (xml) { @@ -686,7 +708,7 @@ jQuery.extend({ // Clear from memory xml = null; } - }, jQuery.timeout); + }, timeout); // Send the data xml.send(data);