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:
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.
Wenn ich 1 in my pagenum parameter
:
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, umXML
[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. ---> Value cannot be null. Parameter name: String