2012-04-09 11 views
0

Ich habe einen Webservice erstellt, der die Aufrufe von einer JQuery AJAX-Funktion ist. Aber selbst wenn async Satz auf true es nicht asynchron arbeitet ..Async AJAX-Aufrufe mit jQuery ASP.NET funktioniert nicht

Meine ASP.NET WebService Code

<System.Web.Services.WebMethod()> _ 
Public Shared Function sampleService(ByVal ttid As String) As String 
Threading.Thread.Sleep(5 * 1000) 
Return "Hello World" 
End Function 

JQuery Anruf Skript

<script language="javascript"> 
$(function() { 
    var tempParam = { 
     ttid: 100 
    }; 

    var param = $.toJSON(tempParam); 
    $.ajax({ 
     type: "POST", 
     url: "testservice.aspx/sampleService", 
     data: param, 
     contentType: "application/json; charset=utf-8", 
     dataType: "json", 
     async: true, 
     error: function() { 
      alert("Error"); 
     }, 
     success: function(msg) { 
      alert("Success") 
      alert(msg.d) 
     } 
    }); 
});​ </script> 

Hier stelle ich es als async = wahr. Auch dann bekomme ich nach 5 Sekunden die Erfolgsmeldung. Das bedeutet nicht asynchron. Was ich glaube ist, wenn async = true, wird es nicht auf die Nachricht vom Webservice warten. Das ist eigentlich meine Anforderung.

+0

Übrigens, die Option Wert, den Sie festgelegt haben; async: true ist der Standardwert. –

Antwort

3

Die Erfolgsfunktion ist ein Rückruf; Es ist so konzipiert, dass es nach Erhalt einer Antwort aufgerufen wird. Wie können Sie Erfolg oder Fehler feststellen, wenn dieser vor der Ausführung des Server-Threads aufgerufen wurde? Der Aufruf von Sleep unterbricht den aktuellen Server-Thread. Ihre Antwort dauert also fünf Sekunden.

Der asynchrone Teil würde für Javascript-Code gelten, der direkt auf Ihren Ajax-Beitrag folgt. Zum Beispiel:

<script language="javascript"> 
$(function() { 
    var tempParam = { 
     ttid: 100 
    }; 

    var param = $.toJSON(tempParam); 
    $.ajax({ 
     type: "POST", 
     url: "testservice.aspx/sampleService", 
     data: param, 
     contentType: "application/json; charset=utf-8", 
     dataType: "json", 
     async: true, 
     error: function() { 
      alert("Error"); 
     }, 
     success: function(msg) { 
      alert("Success") 
      alert(msg.d) 
     } 
    }); 
    alert('This alert is asynchronous! We do not know yet if the ajax call will be successful because the server thread is still sleeping.'); 
});​ </script> 
+0

Hallo Dan ... Danke für diese klare Information. Aber ich habe noch einen Zweifel daran. Stellen Sie sich vor, mein Webservice enthält einige lange laufende Codes und wir haben diesen Webservice-Aufruf mit Ajax gemacht. Mein Zweifel ist, dass die Codeausführung des Webservice ausgesetzt wird, wenn der Benutzer dieses Browserfenster schließt, oder wird es fortgesetzt, bis alle Codes im Webservice ausgeführt werden, selbst nachdem der Browser geschlossen wurde? –

+0

@ user954093 Ich kann nicht mit Autorität sagen, da ich nie zuvor auf das Problem gestoßen bin, aber ich nehme an, dass Ihr serverseitiger Prozess die Ausführung unabhängig vom Browserstatus, in dem er aufgerufen wurde, beendet. Es sei denn natürlich, Sie verfolgen den Sitzungsstatus auf der Serverseite und suchen explizit nach einer abgebrochenen Sitzung. –

+0

Danke Bro. Ich habe das probiert und arbeite im Hintergrund. Prost Chef .. –

-1

Haben Sie überprüft, dass der Webservice im Skript ausgeführt wird.

Bitte überprüfen Sie dies und senden Sie ein Update, wenn es funktioniert oder nicht.

+0

Der Webservice funktioniert einwandfrei. –

+0

Hey @AndrewBarber ich war nur Cross-Checking! Manchmal passiert es, dass wir den ganzen Weg arbeiten und eine einfache Linie vergessen. – Murtaza

2

Hier habe ich es als async = wahr. Auch dann bekomme ich nach 5 Sekunden die Erfolgsmeldung. Das bedeutet nicht asynchron. Was ich glaube ist, wenn async = true, wird es nicht auf die Nachricht vom Webservice warten.

Nein, async bedeutet den Arbeitsfaden gesperrt ist und keinen anderen Code nicht ausgeführt werden (und das Fenster gefrieren kann ...), bis er die Antwort vom Server für seine Anfrage erhalten.
Es bedeutet nicht, dass Sie überhaupt eine Antwort bekommen werden!