Вызовите веб-метод в jQuery с параметром - PullRequest
0 голосов
/ 05 июля 2018

У меня есть webMethod, который принимает аргумент от сеанса userID сеанса сервера

[WebMethod]
    public void getNotificationList(string userID)
    {
        JavaScriptSerializer js = new JavaScriptSerializer();
        Context.Response.Write(js.Serialize(t.std_notification_get_list(int.Parse(userID))));
    }
}

Я хочу вызвать этот веб-метод из скрипта jQuery и заполнить данные таблицей HTML

<table id="data-table-combine" class="table table-striped table-bordered">
                    <thead>
                        <tr>
                            <th class="text-nowrap">Message</th>
                            <th class="text-nowrap">User From</th>
                            <th class="text-nowrap">User To</th>
                            <th class="text-nowrap">Date</th>
                            <th class="text-nowrap">Action</th>
                        </tr>
                    </thead>
                    <tbody>
                    </tbody>
                </table>

Сценарий:

<script>
$(document).ready(function () {

    showTableData();

    //$('#submit').click(function () {
    //    showTableData();

    //    var var_name = ('#name');
    //    alert(var_name.valueOf());
    //});
});
var showTableData = function ()
{
    var sValue = '<%=HttpContext.Current.Session["userID"]%>';
    $.ajax({
        dataType: "json",
        method: "post",
        url: 'UserService.asmx/getNotificationList',
        data: JSON.stringify({ userID: sValue }),
        success: function (response) {

            var userTable = $('#data-table-combine tbody');
            userTable.empty();

            $(response).each(function (index, duser) {

                alert("UserID : " + sValue + ", Message: " + duser.Message);

                var var_message = (duser.Message == null) ? '' : duser.Message;
                var var_user_from = (duser.User_From == null) ? '' : duser.User_From;
                var var_user_to = (duser.User_To == null) ? '' : duser.User_To;
                var var_action = (duser.Action == null) ? '' : duser.Action;
                var var_date = (duser.Date == null) ? '' : duser.Date;

                userTable.append('<tr class="gradeA"><td>' +
                    var_Message + '</td><td>' + var_user_from + '</td><td>' + var_user_to +
                    '</td><td>' + var_action + '</td><td>' + var_date + '</td></tr>');
            });
        },
        error: function (err) {
            //alert(err);
        }
    });
};

И когда скрипт запускается, таблица не содержит никаких значений. Так в чем же проблема? И как я могу передать параметр в WebMethod в JQuery ??

Ответы [ 2 ]

0 голосов
/ 06 июля 2018

Несколько идей, чтобы попробовать:

Попробуйте добавить косую черту перед URL-адресом, чтобы он искал службу, начинающуюся с корня:

url: '/UserService.asmx/getNotificationList',

Также попробуйте добавить contentType:

contentType: "application/json; charset=utf-8",

Edit:

Вы используете сериализатор, поэтому верните строку. Убедитесь, что ваш метод статический .

[WebMethod]
public static string getNotificationList(string userID)
{
    JavaScriptSerializer js = new JavaScriptSerializer();
    return js.Serialize(t.std_notification_get_list(int.Parse(userID))));
}

Важная вещь, которую нужно знать о возврате json из веб-метода, заключается в том, что ответ является оберткой. Ваши фактические данные находятся в объекте d.

$(response.d).each(

Но , вы вернули JSON строку , поэтому для доступа к данным как к объекту необходимо преобразовать их в объект:

var myData = JSON.parse(response.d);

Тогда вы можете сделать

$(myData).each(

В зависимости от того, как структурированы ваши данные, вам может потребоваться внести некоторые коррективы, например myData[0].duser или myData[0].Message.

0 голосов
/ 05 июля 2018

попробуй их использовать ...

data: "{userID:" + JSON.stringify(sValue) + "}",

или используйте другой способ

Объявите их перед вызовом ajax

var data = { userID: sValue };
var json_data = JSON.stringify(data);

используйте его в ajax

data: json_data,
...