Разница между клиентскими обратными вызовами и методами Ajax-страниц - ASP.NET - PullRequest
14 голосов
/ 25 августа 2009

Насколько я понимаю, оба они по сути делают одно и то же (позволяет нам выполнять метод на стороне сервера из JS). Есть ли различия?

Кроме того, методы Ajax Page могут быть реализованы с использованием JQuery или ScriptManager. Какой из них предпочтительнее и почему ??

** BOUNTY: Добавление вознаграждения, чтобы получить четкое объяснение вопроса. Спасибо **

Ответы [ 3 ]

22 голосов
/ 08 сентября 2009

По сути, Клиентские обратные вызовы и методы Ajax Page делают то же самое. Они используют объект XMLHttpRequest для отправки запроса (обычно асинхронного) на некоторый URL-адрес, получения результатов этого запроса, а затем запускают предоставленный вами метод обратного вызова ( callback со строчной буквы c ), передавая результаты запроса вашему методу.

Сказав это, между этими двумя подходами есть одно большое различие:

  • Методы страницы реализованы как статические методы на вашей странице. Класс вашей страницы - это просто удобный контейнер для этих методов, который действительно может быть размещен где угодно (веб-сервис, пользовательский HttpHandler и т. Д.). Поскольку ни один экземпляр никогда не будет создан, клиенту не нужно отправлять данные ViewState, и Asp.Net не должен проходить жизненный цикл Page. Обратная сторона в том, что у вас нет доступа к методам и свойствам экземпляра класса Page. Однако во многих случаях вы можете обойти это путем рефакторинга методов экземпляра в статические методы. (См. эту статью для получения дополнительной информации.)

  • Обратные вызовы клиента реализованы как методы экземпляра на вашей странице. У них есть доступ к другим методам экземпляра на вашей странице, включая материалы, хранящиеся в ViewState. Это удобно, но имеет свою цену: чтобы создать экземпляр Page, клиент должен отправить на сервер относительно большой объем данных и пройти через значительную часть жизненного цикла страницы. ( В этой статье есть хорошая диаграмма , показывающая, какие части.)

Кроме того, стоимость их установки несколько варьируется, и клиенты используют их по-разному:

  • Обратные вызовы клиента требуют достаточного количества уникальных строительных лесов код, который тесно связан с Asp.Net (как показано в ссылке выше). Дано гораздо более простые альтернативы, которые у нас есть, я испытываю желание сказать, что эта технология устарела (для новых разработок).

  • Вызов методов страницы с использованием ScriptManager требует меньше настроек, чем клиентские обратные вызовы: у вас просто есть вставить ScriptManager на ваш страница, набор EnablePageMethods = true, затем получите доступ к вашим методам страницы через прокси PageMethods прокси.

  • Для вызова методов страницы с использованием jQuery требуется только связать библиотеку jQuery (и, конечно, знакомство с jQuery).

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

4 голосов
/ 26 августа 2009

Я бы сказал, что есть различия, но я бы сказал, делай так, как тебе удобнее.

Я использовал оба подхода, и вызовы jQuery со страницы обычно бывают быстрее. Я пишу обработчик ashx, который выполняет работу, необходимую для вызова jquery (запрашивает базу данных, обрабатывает что-то и т. Д.), И вызывает его со страницы. Я бы не использовал страницу aspx для вызова jQuery, потому что вы отправляете много информации, которая вам вообще не понадобится. Разница / преимущество использования вызова Ajax.Net заключается в том, что вам не нужно создавать другую страницу для обработки, вы можете использовать те же события страницы для этого.

Например, если вам нужно заполнить второй выпадающий список, используя выбранное значение для первого, вы можете использовать Ajax.Net для вызова SelectedIndexChanged в коде страницы позади, и при его запуске идут Page_Load, SelectedIndexChanged, Page_PreRender и так далее. В методе события вы запросите базу данных и заполните второй ddl.

С jQuery это может немного отличаться. Вы обращаетесь к обработчику ashx, обработчик - это просто метод сервера, который выполняет магию и возвращает данные в той форме, которую вы хотите иметь (json, массив строк, xml и т. Д.), И заполняете второй ddl с помощью javascript. Как я уже говорил ранее, некоторые люди не чувствуют себя слишком комфортно с клиентским кодом и склонны делать это на сервере, но я всегда говорю, что вам нужно использовать правильный инструмент для правильной работы, поэтому знайте свои инструменты и применяйте их. их с умом.

Если вы хотите узнать больше о ASP.Net, обработчиках ASHX и jQuery, вы можете прочитать сообщение , о котором я писал.

Надеюсь, это поможет .-

0 голосов
/ 08 сентября 2009

Они по сути одинаковы. Оба

  1. Настройте веб-сервис для вас, который может вызывать JavaScript для элемента управления.
  2. Обеспечение асинхронного ответа e без участия жизненного цикла страницы.

Они разные:

  1. Методы страницы просто требуют, чтобы вы украсили статический метод атрибутом, и все готово. Остальная часть магии обрабатывается обработчиками HTTP и модулями. Обратные вызовы требуют, чтобы вы реализовали несколько интерфейсов и обрабатывали асинхронные обработчики событий самостоятельно. Я нахожу их немного более болезненными.
  2. Обратные вызовы работают только с определенными элементами управления . Вызов методов страницы позволяет вам влиять на любой элемент управления через пользовательский JavaScript. Обратные вызовы имеют небольшое преимущество в том, что поведение на стороне клиента уже записано и исправлено. С методами страницы вы получаете большую гибкость , однако (поведение на стороне клиента определяется вами).

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

Что касается вопроса ScriptManager vs. JQuery, я чувствую, что здесь речь идет о вкусе больше всего на свете. Мне нравится синтаксис JQuery, и я чувствую, что он работает лучше, но в общей схеме самым дорогим является XmlHttpRequest ... после этого выполнение javascript, вероятно, будет незначительным по сравнению с этим.

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