2

I've made a long-polling like a request in a function using jQuery ajax, which will run all the time. There is another request made to send data to PHP back-end file and this second request is not long-polling, it just sends data to that PHP file.

Problem: I examined with Firebug that when the long-polling request is running, I'm not able to send another request as long as the long-polling is running. How do I send another request even if the long-polling is running?

Note: I've used async: true in both.

another question: how do I make sure that even the function which holds long-polling request code will be called multiple times, but the long-polling request will be made only and only one?

3 Answers 3

5

Does your php use session based authentication? Your problem might be session locking. This can occur in PHP that uses session_start() unconditionally at the top of each request, and is sometimes default behavior in an MVC framework even if the session is never modified. Other suspect use cases is if both scripts depend on being logged in as an admin user.

If you suspect this might be the case, try strategic placement of session_write_close() at the earliest possible point after you no longer need to modify session data for your two scripts.

Sign up to request clarification or add additional context in comments.

1 Comment

within the same request, you can't modify the session after session_write_close. You should put it after the last time you need to modify the session within a single request. Each time your long-polling script fires is a separate request, and the data sending script is a separate request too. When each request fires you have the opportunity to read and write the session.
0

You need to use async : true (which is the default).

If you say async : false that means it does a synchronous request, i.e., it waits for the first request to finish before doing anything else. You want an asynchronous request so that the browser can keep doing other things while waiting for the response from the first request.

(There is rarely a need for async : false, and if you're not sure whether you need it you almost certainly don't.)

3 Comments

sorry either i've mistaken or someone edited question, i'm using async : true in both functions
OK, well that makes my answer somewhat obsolete. If you're already using async : true then it should work - I've certainly run multiple simultaneous ajax requests before (and had the responses come back in a different order, i.e., processed the fastest first).
how i make sure that even the function which holds long-polling request code will be called multiple times, but the long-polling request will be made only and only one.
0

Multiple requests with Ajax, Jquery.

By default Jquery already makes asynchronous requests; however, the 'queuing' problem does not happen in Javascript code unless you are using the async: false option; which would obviously block the browser until the request was terminated. In addition, this problem can occur for the following reasons:

1 - Using PHP's built-in server - Using this feature of PHP 5.5, responses to requests are made one after another on the same machine, that is, on the same computer. However, I recommend that you test the scripts using the latest version of the XAMP server;

2 - Use of sessions - For each session the responses to requests are presented in queues, not in parallel, however, it is recommended to use session_write_close;

3 - Unintended configuration of the MaxClients option of the directive in Apache - In case the first and / or second option does not occur; the third for sure, is the problem. To resolve, simply access the httpd-npm file and configure the MaxClients (256) option for multiple requests. In the current version of Apche, if I'm not mistaken, the MaxClients option has been replaced by MaxConnectionsPerChild.

Therefore, the options presented also depend on the contexts also presented. Hope this helps.

Comments

Your Answer

By clicking “Post Your Answer”, you agree to our terms of service and acknowledge you have read our privacy policy.

Start asking to get answers

Find the answer to your question by asking.

Ask question

Explore related questions

See similar questions with these tags.