2011-01-03 19 views
0

Jedes Mal, wenn ich die ASPX-Seite unten ausführen, erhalte ich einen internen Serverfehler. Dies ist etwas, das ich aus dem Internet kopiert & entkleidet das Original bis zu diesem in einem Versuch herauszufinden, wann dieses Problem verursacht wird.jquery Problem immer Fehler

ASPX Seite:

<%@ Page Language="C#" AutoEventWireup="true" CodeFile="x.aspx.cs" Inherits="x" %> 

<!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 id="Head1" runat="server"> 
     <title>Adventure Works</title> 

     <style type="text/css"> 
     .loading 
     { 
      background-image: url('ajax-load.gif'); 
      background-repeat: no-repeat; 
     } 
     </style> 

    <script src="/Scripts/jquery-1.3.2.js" type="text/javascript"></script> 

    <script type="text/javascript"> 

     function CallService() { 

      $('input[type=button]').attr('disabled', true); 
      $("#CustDetails").html(''); 
      $("#CustDetails").addClass("loading"); 
      $.ajax({ 
       type: "POST", 
       url: "GetVendor.asmx/GetVendorDetails", 
       data: "{'ID': " + $("#txt_id").val() + "}", 
       contentType: "application/json; charset=utf-8", 
       dataType: "json", 
       success: OnSuccess, 
       error: OnError 
      }); 

      function OnSuccess(data, status) { 
       alert('success'); 

       $("#CustDetails").removeClass("loading"); 
       // $("#textVendorNameLookup").html(data.d); 
       $('input[type=button]').attr('disabled', false); 
      } 

      function OnError(request, status, error, response) { 

       $("#CustDetails").removeClass("loading"); 
       $("#CustDetails").html(request.statusText); 
       $('input[type=button]').attr('disabled', false); 

       //$("#textVendorNameLookup").html(request.statusText); 
      } 

     } 
    </script> 


</head> 
<body> 
    <form id="DocForm" runat="server"> 
    <div> 

     <table style="width:31%;"> 
      <tr> 
       <td> 
        Enter Contact ID</td> 
       <td> 
        :</td> 
       <td> 
        <input id="txt_id" value="12" type="text" /><input id="btnGo" type="button" 
         value="Get Details" onclick ="CallService(); return false;"/></td> 
      </tr> 
      </table> 
    <br /> 
    <div id="CustDetails" style="width: 60%; height: 75px;"> 
    &nbsp; 
     </div> 
    </div> 
    </form> 
</body> 
</html> 

ASMX Seite

using System; 
using System.Collections.Generic; 
using System.Linq; 
using System.Web; 
using System.Web.Services; 
using System.Data.SqlClient; 
using System.Configuration; 
using System.Data; 

/// <summary> 
/// Summary description for AdvService 
/// </summary> 
[WebService(Namespace = "http://tempuri.org/")] 
[WebServiceBinding(ConformsTo = WsiProfiles.BasicProfile1_1)] 
// To allow this Web Service to be called from script, using ASP.NET AJAX, uncomment the following line. 

[System.Web.Script.Services.ScriptService] 
public class GetVendor : System.Web.Services.WebService { 

    public GetVendor() { 

     //Uncomment the following line if using designed components 
     //InitializeComponent(); 
    } 

    public int GetVendorDetails(int id) 
    { 
     return id; 

    } 
} 

Die CS-Seite;

using System; 
using System.Collections.Generic; 
using System.Linq; 
using System.Web; 
using System.Web.UI; 
using System.Web.UI.WebControls; 

using Telerik.Web.UI; 
using System.Data; 
using System.Data.Sql; 
using System.Data.SqlClient; 
using System.Configuration; 
using System.Reflection; 


public partial class x : System.Web.UI.Page 
{ 

    protected void Page_Load(object sender, EventArgs e) 
    { 

    } 

} 

ahia, Larry ...

+0

Wann Sie den Server-Fehler beim Laden der Seite bekommen oder klicken auf die Schaltfläche? – Vadim

+0

Sie wissen, dass mit dieser ASP.NET-Seite nie JSON zurückgegeben werden, richtig? nur eine Nummer, die nicht als JSON formatiert ist. Verwenden Sie dazu JSON.NET http://json.codeplex.com - Und 'GetVendorDetails' ist nicht einmal ein WebMethod !!! – balexandre

+0

@balexandre Json.net ist nicht notwendig; Sehen Sie sich mein Beispiel an, das momentan gepostet werden soll ... – Tahbaza

Antwort

1

Ich glaube, Sie müssen nur so diese Methoden mit [WebMethod] wie dekorieren:

[System.Web.Script.Services.ScriptService] 
public class GetVendor : System.Web.Services.WebService { 

    [WebMethod] 
    public int GetVendorDetails(int id) 
    { 
     return id; 

    } 
} 
+0

chprpipr, ich fügte [WebMethod] hinzu und ich bekomme das gleiche Ergebnis. Irgendwelche anderen Ideen? Ich bin ein Neuling zu jQuery, also fasse ich @ Strohhalme. – larryr

+0

@larryr: ​​Können Sie einen Screenshot oder Text des Fehlers hochladen? – chprpipr

+0

Es gibt keinen wirklichen Fehler, es gibt 'Interner Serverfehler' zurück. Ich habe einige Ratschläge von unten genommen und das 'Element prüfen' in Chrome verwendet und festgestellt, dass der Datenparameter, bei dem #txt_id aufgefüllt werden sollte, nicht lautet ":" Ungültiger Web-Service-Aufruf, fehlender Wert für Parameter :) – larryr

0

können Sie VS.net des Debuggers verwenden, um zu sehen, welcher Code ausgeführt wird (falls vorhanden), wenn ein Ajax-Aufruf aufgerufen wird. Dies ist ein guter Startpunkt für "interne Server Error" -Ajax-Probleme.

Als nächstes, wenn Sie nicht Firebug (ein Firefox-Plug-in für Web-Entwicklung) verwenden, sollten Sie es auf jeden Fall überprüfen, um mit Ajax Call Debugging unter viel mehr zu helfen. Spezifischer für Ihre Anfrage, sehen Sie, wenn das Ändern Ihrer GetVendorDetails Methode, um mehr zu sein, dieses hilft.

using System.Web.Script.Services; 
using System.Web.Services; 
using System.Web.Script.Serialization; 

...

[WebMethod] 
[ScriptMethod(ResponseFormat=ResponseFormat.Json)] 
public string GetVendorDetails(string Id) { 
    // do your processing here to get your result 
    return new JavaScriptSerializer().Serialize(yourObjectInstanceToBeJsonSerialized); 
} 
+0

Sie erkennen, dass ASMX Service immer noch XML ausgibt, oder? Um reines JSON zurückzugeben, benutzen Sie entweder WCF eines Wrapper-Aufrufs. – balexandre

+2

@balexandre, beachten Sie den ResponseFormat.Json-Dekorator; es gibt Json zu meinen $ .ajax jquery Calls zurück, genug sagte – Tahbaza

1

OK, die Antwort auf diese eine ist ein ‚Boot der Kopf '... wenn Sie das Datenpaar angeben, muss der Name sowohl in den Daten als auch im Web-Service gleich sein .... Danke an alle für die Hilfe/Vorschläge. -

1

Versuchen Sie, diese sollte es funktionieren,

function CallService() { 

    var CatID = {"ID": $('#txt_id').val()} 
    $('input[type=button]').attr('disabled', true); 
    $("#CustDetails").html(''); 
    $("#CustDetails").addClass("loading"); 
    $.ajax({ 
     type: "POST", 
     url: "AdvService.asmx/GetCtcDetails", 
     data: JSON.stringify(CatID),, 
     contentType: "application/json; charset=utf-8", 
     dataType: "json",   

     success: OnSuccess, 
     error: OnError 
    }); 

}