AJAX: Der Server hat mit dem Status 500 (Interner Serverfehler) geantwortet.

Ich entwickle ein visuelles Webpart und versuche, einige Listenelemente bei Bedarf aufzulisten . In diesem Sinne habe ich einen WebService mit dem Namen CommentFetchSvc.asmx erstellt und den folgenden Code hinzugefügt:

public class CommentFetchSvc : System.Web.Services.WebService { public CommentFetchSvc() { //Uncomment the following line if using designed components //InitializeComponent(); } [WebMethod] public string HelloWorld() { return "Hello World"; } public class BlogItem { public string Title { get; set; } public string Body { get; set; } } [WebMethod] [ScriptMethod(ResponseFormat = ResponseFormat.Json)] public List<BlogItem> ReadComments(string pagenum) { List<BlogItem> blogList = new List<BlogItem>(); using (SPSite oSpSite = new SPSite("http://mysiteUrl")) { using (SPWeb oSpWeb = oSpSite.OpenWeb()) { SPList oList = oSpWeb.Lists["LageData"]; SPQuery oQuery = new SPQuery(); int pageNum = int.Parse(pagenum); // Number of rows to fetch oQuery.RowLimit = 5; // Start reading from 1 int intIndex = 1; do { SPListItemCollection collListItems = oList.GetItems(oQuery); // Check if this are the records to be returned if (intIndex == pageNum) { // Read items for the specific range foreach (SPListItem oListItem in collListItems) { BlogItem item = new BlogItem(); item.Title = oListItem["Title"].ToString(); item.Body = oListItem["ID"].ToString(); blogList.Add(item); } break; } oQuery.ListItemCollectionPosition = collListItems.ListItemCollectionPosition; intIndex++; } while (oQuery.ListItemCollectionPosition != null); } } return blogList; } } 

Ich habe und erstellt hat WebService in _layouts/15/Load5MoreComments gesendet. Wenn ich die URL von WebService eingebe, wird sie erfolgreich geladen und ich kann meine Methoden sehen: Webservice

dann versuche ich, ReadComments von Ajax mit folgendem Code aufzurufen:

<asp:HiddenField Value="1" runat="server"></asp:HiddenField> 
<script type="text/javascript"> $(document).ready(LoadData()); function LoadData() { GetCommentItems(); } function GetCommentItems() { var pageTrack = $("input[id$="pageTrack"]").val(); $.ajax({ url: "/_layouts/15/Load5MoreComments/CommentFetchSvc.asmx/ReadComments", type: "POST", data: "{"pagenum":"" + pageTrack + ""}", contentType: "application/json;", dataType: "json", success: function (msg) { AppendItems(msg); var newPageTrack = $("input[id$="pageTrack"]").val(); $("input[id$="pageTrack"]").val(parseInt(newPageTrack) + 1); }, error: function (xhr, msg) { console.log(msg + "\n" + xhr.responseText); } }); function AppendItems(data) { $.each(data.d, function (i, item) { var title = item.Title; var body = item.Body; html = "<li><b>" + title + "</b></li>"; html += body; html += "<hr/>"; $("#resultarea").append($(html)); }); } } </script> <p> <asp:HyperLink NavigateUrl="javascript:void(0);" onClick="GetCommentItems();" runat="server">View next five comments..</asp:HyperLink> </p> 

ABER ICH ERHALTE DEN FOLGENDEN FEHLER Failed to load resource: the server responded with a status of 500 (Internal Server Error)

Obwohl, wenn ich auf ReadComments klicke Link in meinem WebService vom Browser aus funktioniert es perfekt und wenn ich den Parameter pagenum fülle, werden meine Daten angezeigt. AJAX ruft die Methode jedoch nicht auf. Webservice

Wenn ich 1 in my pagenum parameter: Geben Sie hier die Bildbeschreibung ein

Bitte helfen Sie mir.

Antwort

Es ist ein SOAP-Dienst. Versuchen Sie also, XML anstelle von JSON zu senden. So etwas wie:

$.ajax({ url: "/_layouts/15/Load5MoreComments/CommentFetchSvc.asmx", type: "POST", dataType: "xml", beforeSend: function(xhr) { xhr.setRequestHeader("SOAPAction", "http://tempuri.org/ReadComments"); }, data: "<soap:Envelope xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:soap="http://schemas.xmlsoap.org/soap/envelope/"><soap:Body><ReadComments xmlns="http://tempuri.org"><pagenum>"+pageTrack+"</pagenum></ReadComments></soap:Body></soap:Envelope>", contentType: "text/xml; charset=utf-8", success: function (msg) { console.log(msg) }, error: function (xhr, msg) { console.log(msg + "\n" + xhr.responseText); } }); 

Kommentare

  • Vielen Dank für Ihre Antwort, aber ich erhalte die folgende Fehlermeldung: error Request format is invalid: text/xml; charset=UTF-8. Ich habe in die folgende Zeile gewechselt, um XML [ScriptMethod(ResponseFormat = ResponseFormat.Xml)]
  • zurückzugeben Ich ' habe meine Antwort aktualisiert, indem ich die Endpunkt-URL geändert und „dataType“ hinzugefügt habe. Versuchen Sie es mit ihnen. Wenn es ' immer noch nicht funktioniert, weiß ich ' nicht, da dies der Umgang mit den Standard-Sharepoint-SOAP-Diensten ist.
  • Ich erhalte eine neue Fehlermeldung: Unable to handle request without a valid action parameter. Please supply a valid soap action.
  • Entschuldigung, ich habe die Bildschirmaufnahme falsch gelesen. Sie müssen Ihrer Anfrage auch einen Header SOAPAction hinzufügen. Siehe meine bearbeitete Antwort. All diese Dinge werden erklärt, wenn Sie zu /_layouts/15/Load5MoreComments/CommentFetchSvc.asmx/ReadComments
  • gehen. Vielen Dank für Ihren Kommentar, aber ich erhalte erneut einen neuen Fehler: Server was unable to process request. ---&gt; Value cannot be null. Parameter name: String

Schreibe einen Kommentar

Deine E-Mail-Adresse wird nicht veröffentlicht. Erforderliche Felder sind mit * markiert.