/ / Weird Asynchronous Javascript & WebMethod Behaviour - javascript, asp.net, asincrono, webmethod, pagemethods

Comportamento asincrono JavaScript e WebMethod strano - javascript, asp.net, asincrono, webmethod, pagemethods

Sto chiamando un PageMethod in javascript. In questo modo:

function DeleteBatchJS2()
{$find("mdlPassword").hide();
var pswd = $("#txtPassword").val();
var userInfo = get_cookie("UserInfo");
PageMethods.AuthenticateAndDelete(
userInfo,
pswd,
onSuccess(),
onError1());
}

function onSuccess(result)
{alert(result);}

function onError1(result)
{alert(result);}

Ora ecco la parte strana: Si potrebbe pensare che chiamare PageMethods darebbe un (1) avviso durante l'esecuzione. O la funzione onSuccess o la funzione onError1. MA - Ricevo due avvisi, entrambi che dicono "Non definito".

È un dato di fatto, quando inserisco un punto di interruzioneil VB code-behind (come la terza o la quarta riga di codice nella funzione), ricevo ENTRAMBE le caselle di avviso prima di poter accedere al mio codice. Due avvisi e POI il mio codice si rompe.

Questo non ha senso per me. Mi sto perdendo qualcosa?

Grazie,

Giasone.

Post scriptum - Ecco la fonte per la funzione WebMethod. Notare anche che effettua una chiamata WCF.

<WebMethod()> _
Public Shared Function AuthenticateAndDelete(ByVal UserInfo As String, ByVal Password As String) As Boolean
Dim Client As New LetterWriterClient
Dim bo As New BatchOperations
Dim UserNumber As String
Dim UserName As String


"Extract the user name and number from the user info cookie string
UserName = GetValueFromVBCookie("UserName", UserInfo)
UserNumber = GetValueFromVBCookie("UserNumber", UserInfo)

"Now validate the user
If bo.ValidateActiveDirectoryLogin("Backoffice", UserName, Password) Then
AuthenticateAndDelete = Client.Delete_dat_BatchSQL(UserNumber)
Client.Close()
Else
AuthenticateAndDelete = False
End If

End Function

risposte:

0 per risposta № 1

Dovrebbe essere:

PageMethods.AuthenticateAndDelete(
userInfo,
pswd,
onSuccess,
onError1);
}

1 per risposta № 2

Invece di passare il valore restituito dalle funzioni del gestore, ovvero onSuccess () e onError1 (), passa le funzioni stesse, ovvero onSuccess e onError1.


0 per risposta № 3

C'è un tag stateNetworkTimeout coinvolto con sessionState. In questo modo:

<sessionState timeout="540" stateNetworkTimeout="5"></sessionState>

Non avevo uno StateNetworkTimeout, abbastanza sicuro che bombardava ogni volta.

Grazie Mrchief!