Прогрессивное улучшение - что делать, когда JavaScript отключен? - PullRequest
0 голосов
/ 02 апреля 2011

Я понимаю, что такое прогрессивное улучшение, я просто размышляю над некоторыми деталями, когда выполняю его.Конечно, это может быть потому, что я смотрю на это неправильно.Позвольте мне попытаться объяснить мою трудность гипотетическим:

ASP.NET MVC site.У меня есть представление с вкладками навигации.Каждая вкладка предназначена для категории / жанра фильма, которая отображает 5-10 ссылок на фильмы в этой категории.Данные о фильме получаются через Odata от Netflix.

Моя первоначальная мысль - использовать Ajax для извлечения и анализа JSON из правильных запросов OData GET при нажатии каждой вкладки.Как бы я предоставил не-JavaScript версию этого?Возможно ли это вообще?

Для более простых запросов, где JSON не требуется - например, если пользователь входит в систему - я вижу, как можно просто установить cookie и динамически изменять страницу на его основечтобы отразить изменение.Но что, если мне нужно вернуть и проанализировать JSON?Как мне предоставить альтернативу?

Ответы [ 2 ]

5 голосов
/ 02 апреля 2011

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

Поскольку серверная сторона должна знать, как все рендерить,не имеет смысла генерировать вещи (элементы DOM / HTML) на стороне клиента из ответов JSON, которые дает вам сервер.Зачем повторяться?

Это приводит нас к логическому выводу, что при выполнении динамических обновлений на клиенте вам необходимо получить готовый HTML-код с сервера (так как логика рендеринга находится там) и вставить его вДОМ в зависимости от обстоятельств.После этого вы можете работать с недавно вставленными элементами с помощью jQuery и улучшать их сколько хотите.

Так что - забудьте о синтаксическом анализе JSON на клиенте, в противном случае вы избавитесь от прогрессивного улучшения.Если вы хотите вызвать третью сторону, сделайте сервер своим посредником: позвоните на сервер со всей необходимой информацией, чтобы он позвонил третьей стороне и получил обратно готовый HTML.

Если вы сделаете это, то сервер, конечно же, сможет без проблем предоставлять не-JS-версии всего на вашем сайте.Достигнуто полное отсутствие опоры на JS.

1 голос
/ 02 апреля 2011

Нет JSON без JS по определению (нотация объектов JavaScript).Без JS вы не будете совершать AJAX-звонки.Ваши страницы будут отображаться как есть, как и сайты старой школы.

Если вам нужно сделать это постепенно, вам придется вызывать серверную часть службы odata и предоставлять объекты .net сайту в viewdata или вашей viewmodel, и ваши представления / partials отображают его.

В действиях ASP.Net MVC httpcontext, доступный через контроллер, будет иметь свойство по этому пути: this.HttpContext.Request.IsAjaxRequest() и может использоваться для проверки того, хотите ли вы вернуть представление или просто данные json, или что-либоТип ActionResult вы хотите.Это может быть отличной экономией времени для создания сайтов с прогрессивным улучшением.

...