如何防止 ASP.net PageMethod 调用阻塞其他 javascript 函数调用

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

下面的 JavaScript 函数每 15 秒运行一次,并调用一个 ASP.Net 页面方法。完成大约需要 4 - 8 秒。

我在同一页面上还有另一个 JavaScript 函数,该函数每 2 秒运行一次,但会定期被前一种方法阻塞,需要更长的时间才能完成。

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

请问我们如何防止 ASP.Net 页面方法调用阻塞同一页面上的其他 JavaScript 函数执行?

使用浏览器调试工具并检查 PageMethods.GetCaseList 中使用的自动生成的代码,然后使用异步 ajax 调用而不是阻塞调用来模拟调用。

PageMethods 包装器只是为了方便起见,但该代码通常非常难看。您始终可以使用 $.ajax 或本机 XmlHttpRequest.

手动调用它。

异步=真;

如果您进行多次调用,ASP.NET 会话可能会阻塞。在 javascript 方法中使用警报或 console.log 来确定阻塞的是什么

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");
}

-- 已更新--

将 asp.net 会话设置为只读删除了将同步线程的独占会话锁