user1311390
user1311390

Reputation:

JavaScript: Ajax Requests in Order

I'm writing some JavaScript/AJAX code.

Is there anyway to ensure that the server receives the XML requests in the order that they are sent?

If not with plain Ajax, do I get this guarantee if I send everything over a single WebSocket?

Thanks!

Upvotes: 0

Views: 1436

Answers (3)

LetterEh
LetterEh

Reputation: 26706

If it is of utmost importance that they're received in the proper order, and attaching an iterating id to the form isn't enough:

msg_number = 1; sendAJAX(msg_number);  msg_number++;

Then I'd suggest building your own queue-system, and send each subsequent file as the callback of the previous one.
Rather than each element having its own AJAX-access, create one centralized spot in your application to handle that.

Your different AJAX-enabled sections don't even need to know that it is a queue:

AJAX.send({ url : "......", method : "post", success : func(){}, syncronous : true });

On the other side of that, you could have something like:

AJAX.send = function (obj) {
    if (obj.synchronous) {
        addToSyncQueue(obj); checkQueue();
    } else { fireRequest(); }
};

Inside of your sync queue, all you'd need to do is wrap a new function around the old callback:

callback = (function (old_cb) {
    return function (response) {
        checkQueue();
        old_cb(response);
    };
}(obj.success));

obj.success = callback;

AJAX.call(obj);

Inside of checkQueue, you'd just need to see if it was empty, and if it wasn't, use
nextObj = queue.shift(); (if you're .push()-ing objects onto the queue -- so first-in, first-out, like you wanted).

Upvotes: 1

sgress454
sgress454

Reputation: 24958

A couple of options come to mind:

  1. Send them synchronously, by waiting for a successful response from the server after each XML request is received (i.e. make a queue).
  2. If you know the number of requests you'll be sending beforehand, send the request number as a tag with each request, e.g. <requestNum>1</requestNum><numRequests>5</numRequests>. This doesn't guarantee the order that they're received in, but guarantees that they can be put back in order afterwards, and has the added benefit of being sure that you have all the data.

Upvotes: 1

Interrobang
Interrobang

Reputation: 17454

At my company we use this little ajaxQueue plugin, written by one of the core jQuery contributors:

http://gnarf.net/2011/06/21/jquery-ajaxqueue/

Upvotes: 0

Related Questions