используя jquery / ajax / webmethod для обновления списка - PullRequest
0 голосов
/ 03 апреля 2012

У меня есть список, который я хочу обновить с помощью jquery / ajax для вызова веб-метода из кода за страницей. в списке отображаются все пользователи, которые вошли в систему (они добавляются в глобальный список при успешном входе в систему). Очевидно, я могу получить список обновлений, используя полные обновления страницы, но это не эстетично. У меня две проблемы.

  1. Когда я запускаю приложение в Chrome и проверяю сетевую активность с помощью инструментов разработчика, я не вижу вызываемого веб-метода. У меня есть другие веб-методы, которые (я вижу) запускаются / выполняются, как и ожидалось.

  2. я написал сценарий на основе найденного примера, поэтому я не совсем уверен (я относительно новичок в этих областях), если я (а) правильно получаю данные из списка (я просто хотите, чтобы имя пользователя отображалось) и (б) правильно добавили его в список.

вот вебметод:

[WebMethod()]
    public static string[] getCurrentList()
    {
        int count = 0; 
        for(int i = 0; i < Global.ListUsers.Count(); i++)
            count++;

        string[] results = new string[count];

        for (int i = 0; i < count; i++)
        {
            results[i] = Global.ListUsers[i].Username.ToString();**//edited...** 
        }                                            

        return results;
    }

и сценарий:

$(function updateListbox() {
var lBox = $('select[id$=ListBox1]');
setInterval(function () {
    $.ajax({
        beforeSend: function (req) {
            req.setRequestHeader("Accept", "application/json");
        },
        type: "POST",
        url: "Homepage.aspx/getCurrentList",
        data: "json=" + JSON.stringify(data),
        contentType: "application/json; charset=utf-8",
        dataType: "json",
        success: function (data) {
            var results = data.d;
            if (results.length > 0) {
                var updatedList = [];
                for (var i in results) {
                    updatedList.push(results[i]);
                }
                $(lBox).append(updatedList.join('\n'));
            }
            else alert("No new items to update...");
        }
    });
}, 5000);

});

вся помощь и предложения приветствуются и ценятся

Ответы [ 2 ]

0 голосов
/ 30 ноября 2013

На самом деле проблема, похоже, заключается в данных свойства вызова AJAX.Пожалуйста, измените свойство данных следующим образом:

data: "{}",

Нет необходимости отправлять какие-либо параметры ("json =" + JSON.stringify (data). Ваш веб-метод не содержит никаких параметров).Также в соответствии с ответом servarevitas, параметр beforeSend не требуется, ajax-вызов уже определил тип содержимого как Json.

0 голосов
/ 03 апреля 2012

Вам ничего не нужно в поле данных, если вы не передаете параметры в функцию.Просто оставьте это поле, и оно должно работать нормально.

Мне также никогда не приходилось использовать параметр beforeSend, но ваш сценарий может немного отличаться.

...