Можно ли загрузить страницу только один раз с помощью AJAX? - PullRequest
3 голосов
/ 02 мая 2010

У меня есть вызов AJAX для загрузки функции после загрузки страницы, функция открывает лайтбокс в виде рамки с некоторыми данными. Проблема заключается в том, что, если я нажимаю кнопку «Закрыть» (фрейм лайтбокса), страница загружается снова и снова, загружая фрейм, поэтому использование никогда не достигает страницы под слоем фрейма, поскольку фрейм загружается по бесконечному циклу. Я предполагаю, что Ajax повторяет вызов функции, но я хотел бы загрузить кадр один раз, и когда пользователь нажимает X (закрыть), он может вернуться на исходную страницу.

$(document).ready(function(){
var city = $('#citycode').html();

$.ajax({
//when page is loaded, fire the following function
success: function(){
//the function to be fired located in the page in seperate file
openX(city + //some other parameters);
}});


});

Какие-нибудь советы?

Ответы [ 3 ]

4 голосов
/ 02 мая 2010

Вы можете установить глобальную переменную в верхней части страницы и установить ее на true после загрузки страницы, а затем в своем коде вы проверяете, является ли переменная false загрузкой страницы, а не другим способом. Вот прототип:

<script type="text/javascript">

var loaded = false;

$(document).ready(function(){
var city = $('#citycode').html();

$.ajax({
//when page is loaded, fire the following function
success: function(){
if (loaded === false)
{
  //the function to be fired located in the page in seperate file
  openX(city + //some other parameters);
  loaded = true;
}
}});


});
</script>
1 голос
/ 02 мая 2010

Я истолковал ваш вопрос иначе, чем другие ответы, так что вот так ...:)

Я предполагаю, что кнопка Закрыть является гиперссылкой, и действие по умолчанию (изменение URL-адреса страницы) не предотвращается?

Если это звучит правильно, вам нужно предотвратить действие по умолчанию, зафиксировав событие щелчка по ссылке и вызвав метод preventDefault().

Не видя ваш код, вот лучший пример, который я могу привести:

$('div.lightbox').live('click', function (event) {
  event.preventDefault();
});

Обратите внимание на использование live() здесь.

1 голос
/ 02 мая 2010

jQuery может добавить случайный параметр «кеш», чтобы запретить кеширование. Попробуйте добавить установку свойства cache в true в вызове ajax, чтобы разрешить кэширование; Ваш код может выглядеть так:

$.ajax({
  cache: false;
  success: function(...){...},
  ...
});
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...