Charles Okwuagwu Charles Okwuagwu - 1 year ago 132
Javascript Question

HOW to prevent an PageMethod call from blocking other javascript function calls

The JavaScript function below runs every 15 seconds and calls an ASP.Net Page-method. It takes about 4 - 8 seconds to complete.

I also have another JavaScript function on the same page that runs every 2 seconds, but gets periodically blocked by the previous method that takes longer to complete.

function get_case_list_data(count, max_id) {
PageMethods.GetCaseList(count, max_id, uid, is_agent, got_case_list_data, OnFailure);

Please how can we prevent an ASP.Net Page-method call from blocking other JavaScript function execution on the same page?

Answer Source

Use the browser debug tools and inspect the auto-generated code used in PageMethods.GetCaseList then just mimic the call with an async ajax call instead of a blocking one.

The PageMethods wrapper is just for convenience but that code is normally pretty ugly. You can always manually call it your self with $.ajax or native XmlHttpRequest.

async = true;

If your making multiple calls, the ASP.NET session may be doing the blocking. Use alerts or console.log within the javascript methods to determine what is blocking

function get_case_list_data(count, max_id) {
   console.log("before call");
   PageMethods.GetCaseList(count, max_id, uid, is_agent, got_case_list_data, OnFailure);
   console.log("after call");

function got_case_list_data(){
   console.log("in PageMethod success");
   // -- updated --
   // this could be blocking the call to/from other 2 second timer
   // JS is single thread, so window.timeout and ajax callbacks will
   // wait until the function is exited
   // -- end update--
   console.log("end of PageMethod success");

-- updated--

setting the session to readonly removed the exclusive session lock that would synchronize the threads

Recommended from our users: Dynamic Network Monitoring from WhatsUp Gold from IPSwitch. Free Download