C# не удается получить доступ к веб-службе в jquery datatable
Мой код позади в файле SampleService.asmx работает ie
[System.Web.Script.Services.ScriptService] public class SampleService : System.Web.Services.WebService { [WebMethod] public string LoadData() { string constr = ConfigurationManager.ConnectionStrings["SqlCon"].ConnectionString; SqlConnection con = new SqlConnection(constr); DataTable table = new DataTable(); SqlCommand cmd = new SqlCommand("SELECT top 10 CustomerID,CompanyName,ContactName,ContactTitle,Address, City,Region, PostalCode, Country, Phone, Fax FROM Customers"); cmd.Connection = con; con.Open(); SqlDataAdapter adp = new SqlDataAdapter(cmd); adp.Fill(table); con.Close(); //DataTable dtCustomer = new DataTable(); //dtCustomer.Columns.AddRange( // new DataColumn[] // { new DataColumn("ID", typeof(int)), // new DataColumn("Name", typeof(string)), // new DataColumn("City", typeof(string)) // } // ); //// Add value to the related column //dtCustomer.Rows.Add(1001, "PABITRA BEHERA", "Bhubaneswar"); //dtCustomer.Rows.Add(1002, "Arya Kumar", "Cuttack"); //dtCustomer.Rows.Add(1003, "Mr Roket(Braja)", "Nayagard"); //dtCustomer.Rows.Add(1004, "Mr Trupti", "Bhadrak"); JavaScriptSerializer jsSerializer = new JavaScriptSerializer(); List> parentRow = new List>(); Dictionary childRow; foreach (DataRow row in table.Rows) { childRow = new Dictionary(); foreach (DataColumn col in table.Columns) { childRow.Add(col.ColumnName, row[col]); } parentRow.Add(childRow); } return jsSerializer.Serialize(parentRow); } }
и мой вызов службы jquery page выглядит следующим образом
<pre><%@ Page Language="C#" AutoEventWireup="true" CodeFile="DataTablePage.aspx.cs" EnableEventValidation="false" Inherits="DataTablePage" %> <!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"> <meta name="viewport" content="width=device-width" /> <title>ShowGrid</title> <script type="text/javascript" src="//ajax.googleapis.com/ajax/libs/jquery/1.11.1/jquery.min.js"></script> <link href="css/bootstrap.css" rel="stylesheet" type="text/css" /> <link href="https://cdn.datatables.net/1.10.15/css/dataTables.bootstrap.min.css" rel="stylesheet" /> <link href="https://cdn.datatables.net/responsive/2.1.1/css/responsive.bootstrap.min.css" rel="stylesheet" /> <script type="text/javascript" src="https://cdn.datatables.net/1.10.15/js/jquery.dataTables.min.js"></script> <script type="text/javascript" src="https://cdn.datatables.net/1.10.15/js/dataTables.bootstrap4.min.js "></script> <script type="text/javascript"> $(document).ready(function () { debugger; $("#demoGrid").DataTable({ "processing": true, // for show progress bar "serverSide": true, // for process server side "filter": true, // this is for disable filter (search box) "orderMulti": false, // for disable multiple column at once "pageLength": 100, "ajax": { "type": "POST", "url": "SampleService.asmx/LoadData", "data": "{}", "contentType": "application/json; charset=utf-8", "dataType": "json" }, "columnDefs": [{ "targets": [0], "visible": true, "searchable": false }, { "targets": [2], "visible": true, "searchable": true }, { "targets": [7], "searchable": false, "orderable": false }, { "targets": [8], "visible": false, "searchable": false, "orderable": false }, { "targets": [9], "visible": false, "searchable": false, "orderable": false }], "columns": [ { "data": "CustomerID", "name": "CustomerID", "autoWidth": true }, { "data": "CompanyName", "name": "CompanyName", "autoWidth": true }, { "data": "ContactName", "title": "ContactName", "name": "ContactName", "autoWidth": true }, { "data": "ContactTitle", "name": "ContactTitle", "autoWidth": true }, { "data": "City", "name": "City", "autoWidth": true }, { "data": "PostalCode", "name": "PostalCode", "autoWidth": true }, { "data": "Country", "name": "Country", "autoWidth": true }, { "data": "Phone", "name": "Phone", "title": "Status", "autoWidth": true }, { "render": function (data, type, full, meta) { return '<a class="btn btn-info" href="/Demo/Edit/' + full.CustomerID + '">Edit</a>'; } } , { data: null, render: function (data, type, row) { return "<a href='#' class='btn btn-danger' onclick=DeleteData('" + row.CustomerID + "'); >Delete</a>"; } }, ] }); }); </script> </head> <body> <form id="form1" runat="server"> <div> <div class="container"> <br /> <div style="width:90%; margin:0 auto;"> <table id="demoGrid" class="table table-striped table-bordered dt-responsive nowrap" width="100%" cellspacing="0"> <thead> <tr> <th>CustomerID</th> <th>CompanyName</th> <th>ContactName</th> <th>ContactTitle</th> <th>City</th> <th>PostalCode</th> <th>Country</th> <th>Phone</th> <th>Edit</th> <th>Delete</th> </tr> </thead> </table> </div> </div> </div> </form> </body> </html>
Что я уже пробовал:
I am unable to connect the <pre>SampleService.asmx function LoadData()
У меня есть сделать то же самое в mvc его работа но здесь в asp.net у меня неприятности. Пожалуйста любой может помочь
F-ES Sitecore
Начните с основ, вызывается ли вообще метод? Посмотрите на раздел network инструментов разработчика браузера (f12), чтобы увидеть, была ли предпринята попытка вызвать службу, и если да, то каков результат этого вызова (404 означает, что он не был найден, 500 означает, что он вызвал его, но служба вернула ошибку, если не было предпринято попытки вызвать метод, проблема лежит где-то в вашем js).
pabitra behera
да я уже пробовал, но сервис не вызывается, не могли бы вы запустить мой код
pabitra behera
Привет, спасибо за попытку решить эту проблему.
То же самое работает и в MVC. также я вызываю метод в ajax его работа но внутри этого раздела
$("#demoGrid").DataTable({}) не получает ответа.
Я думаю, что мне не хватает некоторого синтаксиса
вы можете направлять мне.
У меня есть тестовый сервис на той же странице т. е.
ВАР сведения = "";
$.Аякс({
тип: "почта",
URL-адрес: "SampleService.на asmx/метод loadData",
данные: "{}",
contentType: "application/json; charset=utf-8",
тип данных: "json",
успех: функция (r) {
window.document.write(r.d);
данные = r.d;
},
ошибка: функция (r) {
отладчик;
данные = Р.responseText;
предупреждение(Р.responseText);
},
отказ: функция (r) {
отладчик;
предупреждение(Р.responseText);
}
});
все вышесказанное работает
но внутри объекта он не вызывается
ZurdoDev
Вы упустили из виду то, что говорил Ф-Эс. Вам нужно это отладить. Есть ли сообщение об ошибке? Поставьте точку останова и выясните, что происходит. Неужели вы думаете, что мы могли бы просто посмотреть на код, не запуская его, и сказать вам, что не так? Все, что вам нужно сделать, - это простое устранение неполадок.
pabitra behera
если у меня есть возможность, то почему я помещаю весь код сюда, библиотека js вызывается, но сервис не вызывается. но тот же самый код прекрасно работает в mvc.
ZurdoDev
Я знаю, что это твой вопрос, но как мы можем на него ответить? Мы не можем запустить ваш код, так почему бы нам не знать, почему он не работает.
Это очень просто. Поставьте точку останова на вашей функции успеха и одну на вашей функции ошибки и посмотрите, что произойдет. Только вы можете сделать это, и это так просто сделать.
pabitra behera
Привет изначально я говорю , может быть, у меня есть какая-то синтаксическая ошибка, то есть я пишу код в одной строке, он работает.
и служба вызывается, но она не присваивает значение в таблице мой код попытки выглядит следующим образом.
"Аякс": {"адрес":"SampleService.на asmx/метод loadData","тип": "должность","тип данных": "JSON с"},
Я пишу в одной строке