2009-02-18 16 views
11

Ich habe Probleme mit meinem Such-WebMethod von meinem JQuery-Aufruf. Vielleicht könnte jemand helfen, mir in die richtige Richtung zu zeigen.Verwenden von JQuery zum Aufrufen eines WebMethods

Ich habe auch alles in eine Zip-Datei gepackt, falls jemand es sich genauer ansehen möchte.

http://www.filedropper.com/jsonexample

Dank Ryan

<%@ Page Language="VB" AutoEventWireup="false" CodeFile="Default.aspx.vb" Inherits="_Default" %> 

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"> 

<html xmlns="http://www.w3.org/1999/xhtml"> 
<head runat="server"> 
    <title>JSON Example</title> 
    <script type="text/javascript" language="JavaScript" src="jquery-1.3.1.min.js"></script> 

<script type="text/javascript" language="javascript"> 

function Search() { 
    var search = $("#searchbox").val(); 
    var options = { 
     type: "POST", 
     url: "Default.aspx/Search", 
     data: "{text:" + search + "}", 
     contentType: "application/json; charset=utf-8", 
     dataType: "json", 
     success: function(msg) { 
      alert('Success!'); 
     } 
    }; 
    $.ajax(options); 
} 
</script> 

</head> 
<body> 
    <form id="form1" runat="server"> 
     <input type="text" id="searchbox" size="40" /> 
     <a href="#" onclick="Search()" id="goSearch">Search</a> 
     <br />   
     <div id="Load" /> 
    </form> 
</body> 
</html> 

Und hier ist es, den Code hinter dem default.aspx

Imports System.Data 
    Imports System.Web.Services 
    Imports System.Web.Script.Serialization 

    Partial Class _Default 
     Inherits System.Web.UI.Page 

     <WebMethod()> _ 
     Public Shared Function Search(ByVal text As String) As IEnumerable 
      Return "test" 
     End Function 

    End Class 
+0

Was meinen Sie mit Ihrem WebMethod, als ob Sie keinen Breakpoint treffen würden? Warum verwenden Sie nicht einfach den Code, der über MS Ajax PageMethods für Sie ausgegeben wird? Andernfalls wird durch das Aufrufen von jQuery nichts wirklich gespeichert. –

+0

Ich verstehe, dass es ein paar andere Möglichkeiten gibt, auf Methoden über Javascript wie PageMethods zuzugreifen. Ich erkenne auch, dass dieses Beispiel nichts macht. Aber ich habe die einfachste nicht funktionierende Version für jedermanns Hilfe gemacht. Ich bin einfach nicht in der Lage, in meinen Haltepunkt für die Suchmethode zu gelangen. –

+0

einschließlich Sie öffnen/schließen Skript Tags in der gleichen Zeile trucates Ihren Code. Bitte aktualisieren Sie Ihre Frage und fügen Sie einen Zeilenumbruch zwischen den Skript-Tags "Öffnen" und "Schließen" ein. – bendewey

Antwort

15

Um ein Problem wie dieses zu lösen, ist das erste, was zu tun ist, es in Firebug zu sehen.

Wenn Sie auf den Link "Suchen" klicken und die POST-Anfrage/-Antwort in der Firebug-Konsole sehen, wird ein 500-Server-Fehler angezeigt: Ungültiger JSON-Primitiv.

Der Grund dafür ist, dass die Schlüssel/Wert-IDs in Ihrem "Daten" JSON-Literal nicht zitiert werden. Zeile 17 sollte sein:

data: "{'text':'" + search + "'}", 

Dann wird alles wie erwartet funktionieren.

Hinweis: Die vorgeschlagenen Daten {test: search} werden nicht funktionieren. Wenn Sie jQuery mit einem tatsächlichen JSON-Literal anstelle einer Zeichenfolge versehen, wird dies anstelle von JSON in ein Schlüssel/Wert-Paar test = search und POST konvertiert. Dies führt auch dazu, dass ein ASP.NET AJAX ScriptService oder PageMethod den Fehler Primäre JSON-Primitive auslöst.

+1

FireBug und Fiddler sind Gottheiten. –

+0

Das hat es behoben! Danke Dave, ich liebe deinen Blog und die tollen Sachen, über die du schreibst. –

6

Sie benötigen den folgenden (C#) zu tun:

  • Die WebMethod muss public static
  • Es muss
  • Sie benötigen einen Script auf Ihrer ASPX-Seite
  • EnablePageMethods="true"

das Script des Set mit dem [WebMethod]-Attribute versehen werden, und hier ist eine Probe javascript:

+0

Ich verwende eine gemeinsame Methode. Die Methode, die Sie beschreiben, ist die andere Art des Zugriffs auf Webmethoden. Ich habe mein Beispiel von http://encosia.com/2008/05/29/using-jquery-to-directly-call-aspnet-ajax-page-methods/ –

Verwandte Themen