下面的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函数执行?
答案 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删除了将同步线程的独占会话锁