pabitra behera Ответов: 1

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 с"},
Я пишу в одной строке

1 Ответов

Рейтинг:
0

F-ES Sitecore

Если бы вы действительно последовали моему совету и использовали инструменты разработки, вы бы увидели, что ваш веб-метод был вызван, но он вернул ошибку 500, и ответ объяснил бы ошибку, дав вам что-то для google. Проблема заключается в несоответствии типа контента и того, что вы отправляете. Вы можете полностью опустить тип контента и использовать пустой объект для данных.

"ajax": {
    type: "POST",
    url: "SampleService.asmx/LoadData",
    data: {},               
    dataType: "json"
},


Это приведет к вызову вашего метода, но вполне могут возникнуть дополнительные проблемы в другом месте кода. Это не поможет вам или нам просто написать 100 строк кода, не тестируя бит за битом, а затем заявляя, что он "не работает", и ожидая, что другие отладят ваш код, а затем закончат его. Отладка является жизненно важной частью кодирования.


pabitra behera

Я получил эту ошибку:
Предупреждение DataTables: table id=demoGrid - недопустимый ответ JSON. Для получения дополнительных сведений о данной ошибке, пожалуйста, см. http://datatables.net/tn/1

Я думаю, что ответ службы не потребляет данные.
Я использую SOAP(Webservice)результирующие данные таковы :

<string xmlns="http://tempuri.org/">
[{"CustomerID":1,"CompanyName":"Alfreds Futterkiste","ContactName":"Maria Anders","ContactTitle":"Sales Representative","Address":null,"City":"Berlin","Region":null,"PostalCode":"12209","Country":"Germany","Phone":"030-0074321","Fax":null},{"CustomerID":2,"CompanyName":"Ana Trujillo Emparedados y helados","ContactName":"Ana Trujillo","ContactTitle":"Owner","Address":"Avda. de la Constitución 2222","City":"México D.F.","Region":null,"PostalCode":"05021","Country":"Mexico","Phone":"(5) 555-4729","Fax":"(5) 555-3745"},{"CustomerID":3,"CompanyName":"Antonio Moreno Taquería","ContactName":"Antonio Moreno","ContactTitle":"Owner","Address":null,"City":"México D.F.","Region":null,"PostalCode":"05023","Country":"Mexico","Phone":"(5) 555-3932","Fax":null},{"CustomerID":4,"CompanyName":"Around the Horn","ContactName":"Thomas Hardy","ContactTitle":"Sales Representative","Address":"120 Hanover Sq.","City":"London","Region":null,"PostalCode":"WA1 1DP","Country":"UK","Phone":"(171) 555-7788","Fax":"(171) 555-6750"},{"CustomerID":5,"CompanyName":"Berglunds snabbköp","ContactName":"Christina Berglund","ContactTitle":"Order Administrator","Address":"Berguvsvägen 8","City":"Luleå","Region":null,"PostalCode":"S-958 22","Country":"Sweden","Phone":"0921-12 34 65","Fax":"0921-12 34 67"},{"CustomerID":6,"CompanyName":"Blauer See Delikatessen","ContactName":"Hanna Moos","ContactTitle":"Sales Representative","Address":"Forsterstr. 57","City":"Mannheim","Region":null,"PostalCode":"68306","Country":"Germany","Phone":"0621-08460","Fax":"0621-08924"},{"CustomerID":7,"CompanyName":"Blondesddsl père et fils","ContactName":"Frédérique Citeaux","ContactTitle":"Marketing Manager","Address":"24, place Kléber","City":"Strasbourg","Region":null,"PostalCode":"67000","Country":"France","Phone":"88.60.15.31","Fax":"88.60.15.32"},{"CustomerID":8,"CompanyName":"Bólido Comidas preparadas","ContactName":"Martín Sommer","ContactTitle":"Owner","Address":"C/ Araquil, 67","City":"Madrid","Region":null,"PostalCode":"28023","Country":"Spain","Phone":"(91) 555 22 82","Fax":"(91) 555 91 99"},{"CustomerID":9,"CompanyName":"Bon app\u0027","ContactName":"Laurence Lebihan","ContactTitle":"Owner","Address":"12, rue des Bouchers","City":"Marseille","Region":null,"PostalCode":"13008","Country":"France","Phone":"91.24.45.40","Fax":"91.24.45.41"},{"CustomerID":10,"CompanyName":"Bottom-Dollar Markets","ContactName":"Elizabeth Lincoln","ContactTitle":"Accounting Manager","Address":"23 Tsawassen Blvd.","City":"Tsawassen","Region":"BC","PostalCode":"T2F 8M4","Country":"Canada","Phone":"(604) 555-4729","Fax":"(604) 555-3745"}]

F-ES Sitecore

Данные, которые вы возвращаете, вероятно, не являются тем, что ожидает код. Начните с примеров на сайте bootstrap и заставьте их работать, а затем медленно распространите их на свой собственный код и свои собственные данные.

pabitra behera

можете ли вы мне помочь в этом