Обратные вызовы ASP.NET JavaScript без полных постбэков?

Я собираюсь запустить довольно тяжелую функцию Ajax в приложении моей компании. Что мне нужно сделать, так это выполнять обратный вызов Ajax каждые несколько минут, когда пользователь был на странице.

  • Мне не нужно делать какие-либо обновления DOM до, после или во время обратных вызовов.
  • Мне не нужна информация со страницы, только из файла cookie сайта, который в любом случае должен отправляться с запросами, и значение идентификатора.

Мне любопытно узнать, есть ли какой-нибудь чистый и простой способ сделать обратный вызов JavaScript Ajax на страницу ASP.NET без отправки остальной информации на странице. Я бы не хотел этого делать, если это возможно.

Я действительно просто хочу иметь возможность вызывать один метод на странице, и ничего больше.

Кроме того, я ограничен ASP.NET 2.0, поэтому я не могу использовать какие-либо новые функции ASP AJAX фреймворка 3.5, хотя я могу использовать расширения ASP AJAX для фреймворка 2.0.

ОБНОВИТЬ
Я решил принять ответ DanP, поскольку он, кажется, именно то, что я ищу. Наш сайт уже использует jQuery для некоторых вещей, поэтому я, вероятно, буду использовать jQuery для выполнения запросов, поскольку, по моему опыту, он работает намного лучше, чем фреймворк AJAX ASP.

Как вы думаете, какой метод передачи данных в IHttpHandler будет лучшим? Должен ли я добавлять переменные в строку запроса или POST данные, которые мне нужно отправить?

Я думаю, что единственное, что мне нужно отправить, - это один идентификатор, но я не могу решить, какой лучший метод - отправить идентификатор и обработать его с помощью IHttpHandler. Я хотел бы предложить решение, которое предотвратит случайное или намеренное прямое или намеренное посещение страницы человеком с базовыми навыками работы с компьютером или повторение запросов. Это возможно?

Стоит ли изучать PHP в 2026-2027 годах?
Стоит ли изучать PHP в 2026-2027 годах?
Привет всем, сегодня я хочу высказать свои соображения по поводу вопроса, который я уже много раз получал в своем сообществе: "Стоит ли изучать PHP в...
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
В JavaScript одним из самых запутанных понятий является поведение ключевого слова "this" в стрелочной и обычной функциях.
Приемы CSS-макетирования - floats и Flexbox
Приемы CSS-макетирования - floats и Flexbox
Здравствуйте, друзья-студенты! Готовы совершенствовать свои навыки веб-дизайна? Сегодня в нашем путешествии мы рассмотрим приемы CSS-верстки - в...
Тестирование функциональных ngrx-эффектов в Angular 16 с помощью Jest
В системе управления состояниями ngrx, совместимой с Angular 16, появились функциональные эффекты. Это здорово и делает код определенно легче для...
Концепция локализации и ее применение в приложениях React ⚡️
Концепция локализации и ее применение в приложениях React ⚡️
Локализация - это процесс адаптации приложения к различным языкам и культурным требованиям. Это позволяет пользователям получить опыт, соответствующий...
Пользовательский скаляр GraphQL
Пользовательский скаляр GraphQL
Листовые узлы системы типов GraphQL называются скалярами. Достигнув скалярного типа, невозможно спуститься дальше по иерархии типов. Скалярный тип...
6
0
4 497
9
Перейти к ответу Данный вопрос помечен как решенный

Ответы 9

Вы не ограничены только ASP.NET AJAX, но можете использовать любую стороннюю библиотеку, такую ​​как jQuery, YUI и т. д., Чтобы делать то же самое. Затем вы можете просто отправить запрос на пустую страницу своего сайта, которая должна вернуть заголовки, содержащие файлы cookie.

Ответ принят как подходящий

Если вы не хотите создавать пустую страницу, вы можете вызвать файл IHttpHandler (ashx):

public class RSSHandler : IHttpHandler
    {
        public void ProcessRequest (HttpContext context)
        {   
            context.Response.ContentType = "text/xml";

            string sXml = BuildXMLString(); //not showing this function, 
            //but it creates the XML string
            context.Response.Write( sXml );
        }

        public bool IsReusable
        {
            get { return true; }
        }

    }

Вы также можете использовать WebMethods, которые встроены в библиотеку asp.net ajax. Вы просто создаете статический метод в коде страницы и вызываете его из своего Ajax.

Вот довольно простой пример того, как это сделать здесь

Вам следует использовать веб-службу (.asmx). С помощью Microsoft ASP.NET AJAX вы даже можете автоматически создавать заглушки.

Вы должны использовать обратные вызовы ASP.Net, которые были представлены в Asp.Net 2.0. Вот статья, которая должна вас подготовить:

Программная реализация клиентских обратных вызовов без обратной передачи на веб-страницах ASP.NET

Обновлено: также посмотрите на это: ICallback и сериализация JavaScript на основе JSON

Я тоже голосую за предложение HTTPHandler. Я часто этим пользуюсь. Поскольку он не вызывает экземпляр класса страницы, он очень легкий.

Все уловки фреймворка ASP.NET AJAX фактически создают и снова создают всю страницу на бэкэнде для каждого вызова, поэтому они требуют огромных ресурсов.

Следовательно, мой типичный стиль XmlHttpRequest вернулся к HttpHandler.

What do you think would be the best method of transferring data to the IHttpHandler? Should I added variables to the query string or POST the data I need to send? The only thing I think I have to send is a single ID, but I can't decide what the best method is to send the ID and have the IHttpHandler handle it. I'd like to come up with a solution that would prevent a person with basic computer skills from accidentally or intentionally accessing the page directly

Учитывая, что обратный вызов скрыт в клиентском коде, потребуется кто-то с равной решимостью получить либо строку запроса, либо запрос POST. IE, если у них есть firebug, ваш тоже облажался.

Итак, в этом случае делайте то, что вам проще (подсказка: я бы просто использовал строку запроса).

Чтобы обрабатывать повторяющиеся запросы / прямой доступ, я бы сгенерировал ключ, который отправляется с каждым запросом. Возможно, хеш текущего времени (Нечетко, я бы сократил до минут, но не до секунд из-за задержки в сети) + IP-адрес клиента.

Затем в HTTPHandler выполните тот же хеш и запускайте только в том случае, если они совпадают.

Поскольку вы используете только ASP.NET 2.0, я бы порекомендовал AjaxPro, который создаст файл .ashx. Все, что вам нужно сделать, это загрузить AjaxPro.dll на свой веб-сайт. Я разработал целое приложение с AjaxPro и обнаружил, что оно работает очень хорошо. Он использует сериализацию для передачи объектов туда и обратно.

Это всего лишь пример того, как его просто использовать.

namespace MyDemo
{
  public class Default
  {
    protected void Page_Load(object sender, EventArgs e)
    {
      AjaxPro.Utility.RegisterTypeForAjax(typeof(Default));
    }

    [AjaxPro.AjaxMethod]
    public DateTime GetServerTime()
    {
      return DateTime.Now;
    }
  }
}

Вызвать его через JavaScript так же просто, как

function getServerTime()
{
  MyDemo._Default.GetServerTime(getServerTime_callback);  // asynchronous call
}

// This method will be called after the method has been executed
// and the result has been sent to the client.

function getServerTime_callback(res)
{
  alert(res.value);
}

РЕДАКТИРОВАТЬ

Вы также должны добавить

К файлу config. AjaxPro также хорошо работает бок о бок с APS.NET Ajax, и вы можете передавать объекты C# от клиента к серверу, если класс помечен как [Serializable]

Чтобы предложить другую точку зрения, вы также можете использовать PageMethod на своей главной странице. У Дэйва Уорда есть хороший пост, что иллюстрирует this. По сути, вы используете сообщение jQuery ajax для вызова метода, как показано в сообщении Дейва:

$.ajax({
    type: "POST",
    url: "Default.aspx/GetFeedburnerItems",
    // Pass the "Count" parameter, via JSON object.
    data: "{'Count':'7'}",
    contentType: "application/json; charset=utf-8",
    dataType: "json",
    success: function(msg) {
      BuildTable(msg.d);
    }
  });

Нет необходимости в расширениях Asp.Net Ajax.

Другие вопросы по теме