Yoni Elyo
Yoni Elyo

Reputation: 517

2 concurring ajax request one slow, one quick, both end in the same time

I have to query (via Ajax) 2 scripts at the same time.

I know for sure that one is really quick, it just displays some html, the second is doing some query using a WebService.

The quick request, is always sent after the first one. But with all my attempts, the fast/quick one, never completes before the slow one.

The code use to call the first long ajax request:

$.ajax({
        type: "POST",
        url: '/fr/ajax_flight_get_other_oneway',
        cache: false,
        dataType: 'json',
        success: function(data) {
           // some treatment
        }

The code for the second faster ajax request:

$.ajax({
        type: "POST",
        url: '/fr/load_back_forflight?id=SN4422_23',
        cache: false,
        data: "comps="+compSelectedCodes+"&escale="+escale,
        dataType: 'json',
        success: function(data) {
           // some treatment
        }

Is it something in Apache that should be changed or is it in jQuery?

Upvotes: 0

Views: 1511

Answers (4)

Yoni Elyo
Yoni Elyo

Reputation: 517

I found the solution to my problem, it was linked to the session.

the session was based on file system. So the first (long query) is lock the session file, and then the second one is forced to wait for the long query to finish.

by using session in DB, I've resolved the problem.

thanks for your help

Upvotes: 1

Bouchaala Sabri
Bouchaala Sabri

Reputation: 665

Try this:

$.ajax({
    type: "POST",
    url: '/fr/ajax_flight_get_other_oneway',
    cache: false,
    dataType: 'json',
    success: function(data) {
        // some treatment
        //The code for the second faster ajax request:
        $.ajax({
            type: "POST",
            url: '/fr/load_back_forflight?id=SN4422_23',
            cache: false,
            data: "comps=" + compSelectedCodes + "&escale=" + escale,
            dataType: 'json',
            success: function(data) {
                // some treatment
            }
        });
    }
});​

Upvotes: 0

Lou Franco
Lou Franco

Reputation: 89222

It's possible that the browser decided to use the same HTTP connection for both (using the HTTP header Keep-alive) and thus it appears queued. This is not a jQuery thing -- it's something that browsers can opt to do.

Use your browser's HTTP network traffic debugger to see if that's the case.

If not, then your web-server may be only allowing one connection per client and is queueing them. See this:

How do I configure Apache2 to allow multiple simultaneous connections from same IP address?

Upvotes: 0

Jay Blanchard
Jay Blanchard

Reputation: 34426

Put the slow one in the success callback of the fast one. This will guarantee that the fast request will finish first before starting the second request.

Upvotes: 0

Related Questions