2010-05-04 8 views
5

Ich habe eine WebMethod in der Code-Behind-Datei auf meiner Seite als solche:ASP .NET: Kann nicht nennen Seite WebMethod mit jQuery

[System.Web.Services.WebMethod()] 
public static string Test() 
{ 
    return "TEST"; 
} 

ich die folgende HTML-Seite erstellt um es zu testen:

<html> 
<head> 
    <script type="text/javascript" src="http://ajax.googleapis.com/ajax/libs/jquery/1.4.2/jquery.min.js"/></script> 
    <script type="text/javascript"> 
     function test() {    
      $.ajax({ 
       type: "POST", 
       url: "http://localhost/TestApp/TestPage.aspx/Test", 
       data: "{}", 
       contentType: "application/json; charset=utf-8", 
       dataType: "text", 
       success: function(msg) { 
        alert(msg.d); 
       } 
      }); 
     } 
    </script> 
</head> 
<body> 
    <button onclick="test();">Click Me</button> 
</body> 
</html> 

Wenn ich auf den Knopf klicke, feuert der AJAX ab, aber nichts wird zurückgegeben. Wenn ich meinen Code debugge, wird die Methode Test() nicht einmal aufgerufen. Irgendwelche Ideen?

Antwort

6

versuchen

url: "TestPage.aspx/Test" 

oder was auch immer relative URL, die Ihre Seite treffen wird.

Sie könnten unbeabsichtigt gegen same origin policy verstoßen.

Auch wenn Sie noch nicht da sind, erwarten Sie ein d: umhülltes Objekt. So wie es ist, werden Sie nur eine Zeichenfolge bekommen.

Dies sollte Sie dahin bringen, wohin Sie wollen.

function test() {    
     $.ajax({ 
      type: "POST", 
      url: "TestPage.aspx/Test", 
      data: "{}", 
      contentType: "application/json; charset=utf-8", 
      dataType: "json", 
      success: function(msg) { 
       alert(msg.d); 
      } 
     }); 
    } 
+0

Problem behoben! Danke Code Poet und alle anderen, die geantwortet haben. Es gab zwei Gründe: Der 'dataType' war ein Teil des Problems, also gab ich allen eine Stimme, die auf diesen Teil antworteten. Letztendlich ging es darum, versehentlich dieselbe Herkunftsrichtlinie zu verletzen, weshalb ich dies als Lösung markierte. Danke nochmal allen. Bin dankbar! – John

+0

@John glücklich zu helfen. –

0

müssen Sie Test set() akzeptieren/erlauben POST

+0

- WebMethod ist alles, was auf der Serverseite benötigt wird. –

0

Wenn die Pagemethods richtig auf Ihrer Seite registriert sind, sollten Sie in der Lage sein, sie mit einem Microsoft anrufen registriert Pagemethods Objekt aufgerufen.

Ihr Javascript sollte ausgeführt werden, nachdem die aspx-Seite alle Microsoft-spezifischen Bibliotheken geladen hat. Wenn diese geladen sind, könnten Sie Ihre PageMethod wie folgt aufrufen:

PageMethods.Test (function() OnSucceeded {}, function() OnFailed {});

Hier ist ein Link zu einer besseren Beispiele:

http://www.junasoftware.com/blog/using-jquery-ajax-and-page-methods-with-a-asp.net-webservice.aspx

Wenn Sie nicht bereits sind, ich debuggen diese clientseitige Anrufe zu helfen, empfehlen Firebug. Firebug wird Ihnen alle Informationen geben, die Sie benötigen, um zu bestimmen, was wirklich vor sich geht.

getfirebug.com

+0

-1 und willkommen bei StackOverflow. Die Frage zeigt speziell an, dass jQuery verwendet wird. MsAjax muss NICHT auf eine Seitenmethode hochgeladen werden. –

+0

OK, fair genug. Es klang für mich so, als würde er nach einer Möglichkeit suchen, es zum Laufen zu bringen, und ich stellte eine Alternative zur Verfügung.Ich stimme zu, dass MsAjax nicht * erforderlich * ist, damit es funktioniert, aber es wäre verfügbar und könnte eine brauchbare Alternative sein. Die Frage zeigt speziell an, dass jQuery verwendet wird, aber nicht, wo es heißt, dass jQuery verwendet werden soll. – Jeremy

+0

Sorry, Jeremy. Ich hätte klarer sein sollen, aber ja, es muss über jQuery sein. Ich werde auf jeden Fall Ihre Antwort im Auge behalten, wenn ich mich entscheide, die MsAjax Route in der Zukunft zu gehen. – John

1

Ich habe diese Javascript-Funktion WebMethods mit jQuery zu nennen:

function pageMethod(fn, params, successFn, errorFn) { 
    var pagePath = window.location.pathname; 

    var jsonData = $.toJSON(params); 

    $.ajax({ 
     type: "POST", 
     url: pagePath + "/" + fn, 
     contentType: "application/json; charset=utf-8", 
     data: jsonData, 
     dataType: "json", 
     success: successFn, 
     error: errorFn 
    }); 
} 

Das $ .toJson Serialisierung von jquery.json-1.3-Plugin realisiert wird.

Und wie Sie sehen können, müssen datatype „json“ sein

+0

Danke für das Teilen! Ich werde diese handliche kleine Funktion verwenden, um vorwärts zu gehen. – John

2

Ich denke, Datentyp „json“ sein sollte. Fügen Sie eine Fehlerfunktion hinzu, um zu sehen, welchen Fehlerstatus Sie zurückbekommen, dh 404 nicht gefunden, 500 Serverfehler usw.

+0

Guter Anruf. Vielen Dank! – John