That was another plugin I saw, but it's not what I was looking for :)
I'm creating a Web Application, with an user interface similar to apps
like GMail, Google Reader etc. The problem is that when users click on
a link, some content is downloaded and a page is generated.
Implementing the queue system would not solve the problem: if users
click on a link then click on another, they will see the first page
for a while and then the second. Instead, I want them to see only the
second.
I hope I could explain the problem clearly: my english is not
excellent...

The purpose of this thread was not to ask help: I have already solved
the problem with my patch (which seems to be working perfectly, at
least in my testing server).
I just wanted to share it, and if you think it could be useful maybe
adding it to the official jQuery.

As you see, the code works in a very simple way. If you set the Ajax
Option "newRequestAbort: true" before loading the request, if you then
make another XHR request (no matter if it has newRequestAbort true or
false), the first request will be completed, but the callback won't be
called.
Instead, if that value is set to false (default value), jQuery will
behave the same way as it does now.
The nice thing is that all this just 5 lines of code!

On 12 Nov, 20:20, "John Resig" <[EMAIL PROTECTED]> wrote:
> 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
-~----------~----~----~----~------~----~------~--~---

Reply via email to