Ik ben een visueel webonderdeel aan het ontwikkelen en probeer een aantal lijstitems op aanvraag te maken . Met dit in gedachten heb ik een webservice gemaakt met de naam CommentFetchSvc.asmx
en de volgende code toegevoegd:
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; } }
Ik heb gemaakt en heeft WebService verzonden in _layouts/15/Load5MoreComments
. Wanneer ik de url van WebService invoer, wordt deze met succes geladen en kan ik mijn methoden zien:
dan probeer ik ReadComments
vanuit ajax te bellen met de volgende code:
<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>
MAAR IK KRIJG DE VOLGENDE FOUT Failed to load resource: the server responded with a status of 500 (Internal Server Error)
Hoewel wanneer ik op ReadComments
klik link in mijn WebService vanuit de browser werkt het perfect en als ik de paginaparameter vul, worden mijn gegevens weergegeven. Maar AJAX “roept de methode niet aan.
Wanneer ik 1 in my pagenum parameter
:
HELP ME.
Answer
Het is een SOAP-service, dus probeer XML te verzenden in plaats van JSON. Iets als:
$.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); } });
error Request format is invalid: text/xml; charset=UTF-8.
Ik veranderde naar de volgende regel omXML
[ScriptMethod(ResponseFormat = ResponseFormat.Xml)]
Unable to handle request without a valid action parameter. Please supply a valid soap action.
SOAPAction
aan uw verzoek toevoegen. Zie mijn bewerkte antwoord. Al deze dingen worden uitgelegd wanneer je naar/_layouts/15/Load5MoreComments/CommentFetchSvc.asmx/ReadComments
gaatServer was unable to process request. ---> Value cannot be null. Parameter name: String