2016-06-29 4 views
0

Die folgende JavaScript-Funktion wird alle 15 Sekunden ausgeführt und ruft eine ASP.Net-Seitenmethode auf. Es dauert etwa 4 - 8 Sekunden.So verhindern Sie, dass ein ASP.net PageMethod-Aufruf andere JavaScript-Funktionsaufrufe blockiert

Ich habe auch eine andere JavaScript-Funktion auf der gleichen Seite, die alle 2 Sekunden ausgeführt wird, wird aber regelmäßig von der vorherigen Methode blockiert, die länger dauert, um abzuschließen.

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

Wie können wir verhindern, dass ein Aufruf der ASP.Net-Seitenmethode die Ausführung anderer JavaScript-Funktionen auf derselben Seite blockiert?

Antwort

1

Verwenden Sie die Browser-Debug-Tools, und prüfen Sie den in PageMethods.GetCaseList verwendeten automatisch generierten Code, und simulieren Sie den Anruf dann mit einem asynchronen Ajax-Anruf anstelle eines blockierenden Anrufs.

Die PageMethods-Wrapper ist nur für die Bequemlichkeit, aber dieser Code ist normalerweise ziemlich hässlich. Sie können es jederzeit manuell mit $ .ajax oder nativem XmlHttpRequest aufrufen.

async = true;

Wenn Sie mehrere Anrufe tätigen, führt die ASP.NET-Sitzung möglicherweise die Blockierung durch. Verwenden Warnungen oder console.log innerhalb der JavaScript-Methoden zu bestimmen, was

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

blockiert - updated--

Einstellen der asp.net Sitzung entfernt READONLY die exklusive Sitzungssperre, dass die Fäden synchronisieren würde

+0

so im Grunde sind die Anrufe nicht asynchron? –

+0

Sie können dies mit einer Warnung vor, nach dem PageMethod-Aufruf und innerhalb des Erfolgsrückrufs testen. Google "aysnc PageMethods" es scheint, dass sie aysnc standardmäßig sein und Sie müssen Updates vornehmen, um es syncronouse zu machen. So oder so, dieser Blog hat einige gute Inhalte, um Sie zu starten. http://abhijit-j-shetty.blogspot.com/2011/04/aspnet-ajax-calling-pagemeths.html – Steve

+0

Versuchte $ ajax mit async = true; Das gleiche Ergebnis –

Verwandte Themen