2012-12-10 6 views
0

jquery 확인 대화 상자가 있습니다. 사용자가 OK를 누르면 몇 초가 걸릴 Ajax 호출을 실행합니다. 이 지연 중에 대화 상자에 gif 애니메이션을 표시하여 사용자가 자신의 데이터를 처리하고 있음을 알고 싶습니다. 그러나 대화 상자에 gif가 표시되지 않습니다.Jquery 대화창에 통화 중 표시가 나타나지 않습니다.

HTML은 다음과 같습니다

<div id="dlgReleaseConfirmation" title="ConfirmRelease" style="display : none" > 
    <div id="release-in-progress" style="display:none"> 
      <img src="images/ajax-loader.gif" ></img> 
    </div> 
</div> 

의 js 파일의 코드는 다음과 같습니다

 $("#dlgReleaseConfirmation").dialog({ 
     modal: true, 
     buttons: { 
      "Release": function() { 
       $("#release-in-progress").show();  // show the busy div - not working, blocked by dialog? 
       Release(); // release assays 
       loadTable();   // refresh datatable 
       $("#release-in-progress").hide();  // hide the busy div 
       $(this).dialog("close"); // close this dialog 
      }, 
      Cancel: function() { 
       $(this).dialog("close"); 
      } 
     } 

사람이 내가 뭘 잘못 볼 수 있을까요?

해결책으로 업데이트하십시오.

알렉산더가 나를 올바른 길로 보냈습니다. 결론은 Ajax 호출을 비동기로 호출해야 대화 상자가 사용중 표시기를 표시하도록 업데이트된다는 것입니다. 그러나이 작업을 수행하면 아약스 호출이 비동기식으로 진행되는 동안 코드가 계속되고 화면이 닫히는 문제가 발생하여 사용자에게 피드백이 제공되지 않습니다.

이 문제를 해결하기 위해 비동기 Ajax가 진행되는 곳을 호출하는 동안 Busy 표시기를 숨기고 표시하기 위해 ajaxStart() 및 ajaxStop()에 대한 호출을 추가했습니다.

"Release": function() { 
    $(this).ajaxStart(function() { 
     $("#release-in-progress").show(); 
    }); 
    $(this).ajaxStop(function() { 
     $("#release-in-progress").hide(); 
     $(this).dialog("close"); // close this dialog 
    }); 
    Release(); // release assays 
    loadTable();   // refresh datatable 
}; 
+0

우리에게 CSS를 보여주세요 - 기회는 나타나지만 다이얼로그 뒤에 나타나는 것처럼 보일 수는 없습니다 – ManseUK

+2

'loadTable()'이 비동기 적이라면'$(). hide()'를 완료로 옮겨야합니다 콜백. 'loadTable()'무엇을하고 있습니까? – Alexander

+0

주어진 코드의 버튼은 어디에 있습니까?/ –

답변

1

을 요청이 완료되고, 이미지 리소스가 로딩되지 않을 때까지 실행을 동결하는 loadTable() 함수 동기 AJAX 호출 (async: false)을 실행함으로써, 다음은 작동 해제 버튼 핸들러 코드이다. 원하는 것을 얻기 위해 비동기 호출을 사용해야합니다.

+0

목표는 데이터가 업데이트 될 때까지 표시되는 바쁜 gif가있는 대화 상자를 그대로 두는 것입니다. 새 값으로 업데이트 된 테이블 async로 전환 : false로 설정하지 않습니다. 예를 들어 async : false로 전환하면 실제 데이터가 업데이트되기 전에 릴리스 대화 상자가 닫히고 (즉, Release()가 수행하는 작업) 테이블이 업데이트되어 업데이트 효과를 표시합니다 (즉, loadTable()이 수행하는 작업).). – JerryKur

+0

@JerryKur, 우수합니다. 이제 수정해야 할 모든 것을 알았습니다. – Alexander

+0

Ok. 그래서 여기에 문제를 해결 한 코드가 있습니다. 나는 ajaxStart()와 ajaxStop()을 사용했다. "릴리스": function() { $ (this) .ajaxStart (function() { $ ("# 릴리스 진행 중"). $ (this) .ajaxStop (function() { $ ("# 릴리스 진행 중") hide(); $ (this).대화 상자 ("닫기"); //이 대화 상자를 닫으십시오 }); ReleaseSelectedAssays(); // assays를 해제하십시오. loadAssayTable (true); – JerryKur

관련 문제