Really quickly - I was wondering if this Ajax Queue plugin helped you
at all (or if you saw it):
http://plugins.jquery.com/project/ajaxqueue
We worked on that one last year - just wondering if it helps you at
all, before we look at other solutions.
--John
On Wed, Nov 12, 2008 at 11:49 AM, Ego-Ale-Sum <[EMAIL PROTECTED]> wrote:
>
> In my website, I'm using jQuery to handle XHR requests (using the
> methods $.post, $.get, $.getScript and even the AJAX form plugin).
> I wanted XHR requests to stop if new ones are made.
> I've found a plugin named "AJAX Manager" (or something similar) for
> that, but it was not what I was looking for: first, it supports just
> $.get requests and it keeps all the active requests in a sort of
> queue.
>
> I needed something that stopped all the previous XHR requests when a
> new one is made.
> I thought the best way to accomplish that was simply not to trigger
> the callback after the request completes.
>
> I looked inside the jQuery library and I found that the problem could
> not be solved with a plugin (I needed to edit the $.ajax method
> directly).
> So, I've realized a simple but powerful patch.
>
> I'm posting the patch here: I hope it will be useful.
> Also, since I think it's a quite useful addition, I'm asking the
> developers wheter they could add it to the trunk.
>
> Here's the patch (from my SVN repository):
>
>
>
> Index: jquery.js
> ===================================================================
> --- jquery.js (revision 188)
> +++ jquery.js (revision 190)
> @@ -2512,6 +2512,9 @@
> var jsc = now();
>
> jQuery.extend({
> + // The current request
> + ajaxRequestId: 0,
> +
> get: function( url, data, callback, type ) {
> // shift arguments if data argument was ommited
> if ( jQuery.isFunction( data ) ) {
> @@ -2564,6 +2567,8 @@
> processData: true,
> async: true,
> data: null,
> + newRequestAbort: false,
> + requestId: 0,
> username: null,
> password: null,
> accepts: {
> @@ -2586,6 +2591,10 @@
>
> var jsonp, jsre = /=\?(&|$)/g, status, data,
> type = s.type.toUpperCase();
> +
> + // increment the request counter
> + jQuery.ajaxRequestId++;
> + s.requestId = jQuery.ajaxRequestId;
>
> // convert data if not already a string
> if ( s.data && s.processData && typeof s.data != "string" )
> @@ -2813,9 +2822,12 @@
> onreadystatechange();
>
> function success(){
> - // If a local callback was specified, fire it and
> pass it the data
> - if ( s.success )
> - s.success( data, status );
> + if(!s.newRequestAbort || s.requestId ==
> jQuery.ajaxRequestId)
> + {
> + // 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 )
> @@ -2842,7 +2854,7 @@
>
> handleError: function( s, xhr, status, e ) {
> // If a local callback was specified, fire it
> - if ( s.error ) s.error( xhr, status, e );
> + if ( s.error && (!s.newRequestAbort || s.requestId ==
> jQuery.ajaxRequestId) ) s.error( xhr, status, e );
>
> // Fire the global callback
> if ( s.global )
>
>
>
>
> Here's a test file
>
>
>
> <?php
> if(!empty($_GET['ajax']))
> {
> sleep(3);
> echo "Received ".$_GET['ajax'];
> exit;
> }
> ?>
> <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://
> www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
> <html xmlns="http://www.w3.org/1999/xhtml">
> <head>
> <meta http-equiv="Content-Type" content="text/html; charset=UTF-8" />
> <title>Untitled Document</title>
> <script type="text/javascript" src="app/clientscript/jquery.js"></
> script>
> <script type="text/javascript">
> //<!--
> var id = 0;
> function theCallback(data)
> {
> $("#result").append(data+"<br/>");
> }
>
> function doRequest(abort)
> {
> id++;
> if(!abort)
> {
> $.ajaxSetup({newRequestAbort: false});
> }
> else
> {
> $.ajaxSetup({newRequestAbort: true});
> }
> $.get("test.php", {ajax: id}, theCallback);
> }
> //-->
> </script>
> </head>
> <body>
> <a href="javascript:doRequest(true)">do request that aborts on new
> request</a><br />
> <a href="javascript:doRequest(false)">do request that does NOT abort
> on new requests</a>
> <div id="result"></div>
> </body>
> </html>
>
>
>
> I hope my work can help many other users that every day choose this
> fantastic javascript framework.
>
> >
>
--~--~---------~--~----~------------~-------~--~----~
You received this message because you are subscribed to the Google Groups
"jQuery Development" group.
To post to this group, send email to [email protected]
To unsubscribe from this group, send email to [EMAIL PROTECTED]
For more options, visit this group at
http://groups.google.com/group/jquery-dev?hl=en
-~----------~----~----~----~------~----~------~--~---