2011-05-09 7 views
5

jQuery의 AJAX 함수를 사용하고 있는데 실제 서버가 로컬 호스트에서 처리하는 데이터 요청을 지연시키는 방식을 시뮬레이션하려고했습니다. 이 유사하다double double 문제 jQuery delay()

그래서 내가 작성한 코드 : "게시 ... '메시지가 볼 수 있도록

$('form').submit(function (event) { 
    event.preventDefault(); 

$('#response').html('<p>Posting...</p>').fadeIn().delay(2000).queue(function() { 
     $.post (
     'some_url.php', 
     {/*values here*/}, 
     function (response) { 
      $('#response').html(response).delay(1000).fadeOut('slow'); 

      //The line below is to reset the form element 
      $('input[type="text"], textarea').val(' '); 
     }); 
    }); 
}); 

내가 2 초하여 $ .post 방법을 지연 내가 기본적으로 여기에서이다 2 초가 끝나면 텍스트가 응답으로 변경되고 1 초 동안 그대로 있고 페이드 아웃하기를 원합니다.

첫 번째 지연이 완벽하게 작동하고 Ajax 호출이 완벽하게 작동합니다. , 문제는 - 어떤 이유로 두 번째 지연을 읽지 않고 한 번 표시된 응답 메시지가 사라지기를 거부합니다.

제 질문은 왜 이런 일이 일어나고 어떻게 해결할 수 있습니까?

+0

+1 흥미로운 질문에 대한 ... – pixelbobby

+2

나는 지연 방법에 대해 모르겠지만, 서버 요청에 대한 좀 더 정확한 복제가 sleep() 또는 아약스 응답 코드는 뭐든간에. –

답변

1

큐에서 다음 작업을 처리하려면 큐에서 큐를 제거해야합니다.

http://api.jquery.com/jQuery.dequeue/

편집 : 또는 1.4 이상에서 next :

jQuery를 1.4 첫 번째 인수로 다른 함수에 전달라는 , 을의 기능에서는

가 전화했을 때 가 자동으로 대기를 해제하는 것이 다음 항목으로 이동하고 대기열을 계속 이동합니다.

http://jsfiddle.net/maniator/Ad3pv/

모든 두 번째 부분을해야 할 것입니다 : 당신은 과 같이 사용합니다 :에서

$("#test").queue(function(next) { 
    // Do some stuff... 
    next(); 
}); 

: http://api.jquery.com/queue/

+0

감사합니다. 다음을 사용하여 해결했습니다(); :) – Maverick

+0

@ Husar, 내가 게시 한 답변을 선택했습니다 : - P – Neal

0

내 waitForIt 플러그인을 시도 할 수 있습니다 is :

$('#response').html(response).waitForit({ 
    function: 'fadeOut', 
    options: 'slow', 
    timeOut: 1000 
});