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

时间:2016-06-29 00:30:46

标签: javascript asp.net asynchronous pagemethods

下面的JavaScript函数每15秒运行一次并调用ASP.Net Page-method。完成大约需要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 Page-method调用阻止同一页面上的其他JavaScript函数执行?

1 个答案:

答案 0 :(得分:1)

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

PageMethods包装器只是为了方便,但代码通常非常难看。您可以随时使用$ .ajax或本机XmlHttpRequest手动调用它。

async = true;

如果您进行多次调用,ASP.NET会话可能正在执行阻止。在javascript方法中使用alert或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会话设置为readonly删除了将同步线程的独占会话锁