jQuery Le chiamate Ajax al servizio web sembrano essere sincrone

Ho due chiamate Ajax a un servizio Web da jQuery.

La prima chiamata ( GetMessages ) avvia un intervallo in javascript ( setInterval ) e restituisce una serie di stringhe di messaggi memorizzati in una variabile di sessione.

La seconda chiamata ( UploadUsers ) carica gli utenti e salva lo stato nella sessione da restituire nel metodo GetMessages . Quindi UploadUsers aggiunge messaggi alla Session e GetMessages recupera i messaggi e li visualizza per il client.

Il problema è anche se chiamo entrambi i metodi in modo asincrono, GetMessages aspetta fino a quando UploadUsers è finito. Carica solo.

Ho persino inserito un thread.sleep tra ogni utente che viene aggiunto e mi aspetto che GetMessages restituiti GetMessages “Sono stati aggiunti 1/10 utenti”, “Sono stati aggiunti 2/10 utenti”, ciascuno su chiamate separate.

Quello che succede è che GetMessages non restituisce nulla fino a quando UploadUsers è finito e quindi porta tutto il testo in una volta.

Ho un sacco di codice quindi non so cosa mettere ma qui va:

UploadUsers.aspx

 callAsynchMethod('ClientStatusHandler.asmx/GetMessages', '', printMessages, stopPollingError); callAsynchMethod('ClientStatusHandler.asmx/StartRetrievingLeads', data, stopPolling, stopPollingError); 

Site.js

 function callAsynchMethod(url, keyValue, callBack, callBackError) { $.ajax({ type: "POST", url: url, data: keyValue, contentType: "application/json; charset=utf-8", success: callBack, error:callBackError }); } 

ClientStatusHandler.asmx.cs

 const string key = "LUMessages"; [ScriptMethod(ResponseFormat = ResponseFormat.Json)] [WebMethod(EnableSession = true)] public string[] GetMessages() { if (Session[key] != null) { string[] messages = ((IList)Session[key]).ToArray(); ((IList)Session[key]).Clear(); return messages; } return new string[] { }; } [ScriptMethod(ResponseFormat = ResponseFormat.Json)] [WebMethod(EnableSession = true)] public string[] UploadUsers() { //This function adds a user and calls SaveMessageToQueue //for every user. //I see the message being entered into the session and //I call Thread.Sleep(10000) //between messages. } private void SaveMessageToQueue(string m) { IList messageQueue = (List)HttpContext.Current. Session["LUMessages"]; messageQueue.Add(m); }