2011-12-06 2 views
1

Я использую AJAX для загрузки содержимого опроса в контейнер на странице, и во время перехода я fadeOut контейнер и fadeIn, когда это будет сделано. Он отлично работает для страниц 1-4, но перестает работать на странице 5. Содержимое загружается для страницы 5, но контейнер не fadeIn.JQuery AJAX success + fadeIn

success: function(data){ 
    $("div#surveyContainer").fadeOut(function(){ 
     $("div#surveyContainer").html(data).hide().fadeIn(); 
    }); // end fadeout 
} 

Там нет ссылки на surveyContainer где-нибудь в странице 5. Все, что я могу думать о том, что что-то таймаут заставляя fadeIn не получить срабатывает. Время загрузки составляет около 36 мс. Я установил сценарий php туда, где он отправляет data, чтобы сообщать обо всех ошибках (и данные вносят его в Db просто отлично), но все, что я получаю, это контент, который я ожидаю, но контейнер остается display:none. Если я удалить затухает, все работает отлично:/

Я также попытался это не дало никаких результатов:

success: function(data){ 
    $("div#surveyContainer").fadeOut(function(){ 
     $("div#surveyContainer").html(data); 
     $("div#surveyContainer").fadeIn(); 
    }); // end fadeout 
} 
+0

Опубликовать HTML-код, который отправляется с сервера. –

+1

Почему вы снова скрываете div? Вы уже скрыли его с помощью 'fadeOut' –

+0

@Interstellar_Coder: потому что, если я этого не сделаю, он вообще не работает. Я бы опубликовал HTML, но это похоже на 2000 строк. – jacob

ответ

2

Попробуйте добавить .stop();see reference here

success: function(data){ 
    $("div#surveyContainer").fadeOut(function(){ 
     $(this).html(data).stop(true, true).fadeIn(); 
    }); // end fadeout 
} 

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

Кроме того, вы можете просто использовать this внутри обратного вызова, ну, я не знаю почему. но вы можете.

+1

Но данные заполняются после завершения 'fadeOut', поэтому теоретически не нужно« останавливать ». –

+1

Следовательно, начиная мой ответ с помощью «try» :) Не видя кода и не проверяя его, это мое лучшее предположение. – idrumgood

+0

Нет, не работает :( – jacob

1

Не знаете, почему он разбился бы на отдельной странице tho.

Может быть, вы могли бы попробовать его в функцию обратного вызова из .hide():

$("div#surveyContainer").html(data).hide('slow', function(){ 
    $(this).fadeIn(); 
}); 

Как Interstellar_Coder указал. Вы уже скрыли div#surveyContainer, когда вы его погасли. Теперь нужно просто загрузить свои данные и исчезать его.

success: function(data){ 
    $("div#surveyContainer").fadeOut(function(){ 
     $(this).html(data).fadeIn(); // Removed the .hide() 
    }); // end fadeout 
} 
+1

Почему вы хотите скрыть его ПОСЛЕ того, как данные были заполнены, а затем повторно отобразите его? Вы хотите скрыть div до того, чтобы показать его после его заполнения. –

+0

Thats what я сделал это во втором примере, чтобы связать его лучше. Я просто скопировал его пример, например, с помощью обратного вызова hide. – Anil

+0

отредактировал мой ответ, чтобы отметить глупую ошибку, как указал @Interstellar_Coder – Anil