6

I am trying to make two ajax requests in parallel using jQuery like this:

    var sources = ["source1", "source2"];

    $(sources).each(function() {
      var source = this;
      $.ajax({
        async: true,
        type: "POST",
        data: {post: "data", in: "here"},
        url: "/my/url/" + source,
        success: function(data) {
          process_result(data);
        }
      });
    });

I got the basic structure from this question, but my requests still aren't being made in parallel. "source1" takes a while to complete, and I can see on the server that the second request isn't made until the first is completed.

As far as I can tell, I don't have any other active requests, so I don't think it's a problem with the maximum number of parallel requests for the browser. Am I missing something else here?

Community
  • 1
  • 1
Ryan Olson
  • 2,766
  • 4
  • 29
  • 36
  • What do you see in Fiddler or Firebug? – SLaks Mar 29 '10 at 18:40
  • I just re-tried my answer from that linked question and added a `sleep(4);` in the PHP page - still worked as expected. All 4 requests fired at once and all took ~4 seconds to complete. – Peter Bailey Mar 29 '10 at 18:45
  • Backend was Catalyst running in my development sandbox without the --fork option. The Net panel in Firebug didn't display the second request until the first had completed. – Ryan Olson Mar 30 '10 at 12:55

3 Answers3

13

jQuery does not queue AJAX requests. If you're sure you're not making any other requests your end, how about the server? Maybe it only has one worker?

EDIT: And just to make sure, I tested it with a script that launches 2 AJAX POST requests to a PHP script which sleeps for 5 seconds. They were not queued.

Matt
  • 74,352
  • 26
  • 153
  • 180
8

are you using php? are you using session_start()? sessions cannot be opened in parallel by multiple requests, to they will wait one after another to finish what they're doing.

Quamis
  • 10,924
  • 12
  • 50
  • 66
0

What if you used $.post instead of $.ajax. This works for me.

var sources = ["source1", "source2"];

$(sources).each(function() {
  var source = this;
  $.post("/my/url/" + source, {post:"data", in:"here"}, function(data) {
      process_result(data);
  });
)};
Jonathan Mayhak
  • 12,376
  • 3
  • 21
  • 17