Как запретить пользователю загружать «дочерние» страницы, которые должны быть загружены с помощью ajax

#asp.net #ajax #jquery

#asp.net #ajax #jquery

Вопрос:

У меня есть эта страница с Default.aspx, работающим как «master», и загрузка дочерних страниц с помощью load() функции jQuery. Что-то вроде этого:

     <ul id="navigation>
        <li><a href="Item1.aspx"> Item 1</a></li>
         <li><a href="Item2.aspx"> Item 2</a></li>
    </ul>
    <div id="contend">
         <!-- Ajax loaded pages goes here -->
    </div>
    <div id="footer">
    </div>
  

Проблема в том, что когда пользователь нажимает на какой-либо элемент и, скажем, выбирает открыть в новом окне (вкладке), он, очевидно, увидит только элементы с этой страницы, а не навигацию, нижний колонтитул и что-либо еще со страницы по умолчанию…

Я ищу обходной путь..

возможно, с помощью управления привязкой через URL? как #item1

Комментарии:

1. Витор, что произойдет, если у пользователя отключен javascript? Тогда будет лучше, если ссылка действительно перерисует страницу с новым содержимым на ней. Это называется прогрессивным улучшением или постепенным ухудшением, и это хорошая практика, даже если почти у всех включен javascript.

2. Вы имеете в виду, перерисовывает страницу, даже если мой вызов был сделан из меню ajax? Разве это не противоречило бы самой цели?

3. Я имею в виду, что он должен перерисовать страницу, если ajax не работает, потому что нет javascript

Ответ №1:

Отправьте дополнительный параметр с помощью ajax. Таким образом, вы можете определить, был ли запрос сделан ajax, и выбрать, как построить ответ.

Пример по запросу:

 <script  type="text/javascript">
$(
   function()
   {
    $('#navigation a')
      .click(
              function(e)
              {
                e.preventDefault();
                $('#contend').load(this.href,{'isAjaxRequest':true});
              }
            );
   }
 );
</script>
  

Если пользователь нажимает на ссылку обычным способом, также будет отправлен POST-параметр с именем «isAjaxRequest» , вы можете проверить наличие этого параметра, и если он существует, вывести только фрагмент для #contend, в противном случае всю страницу, включая верхний и нижний колонтитулы и так далее.

Комментарии:

1. Не могли бы вы предоставить (действительно простой) пример, основанный на моей структуре? Я не уверен, как я мог бы перестроить структуру..