2013-05-13 1 views
0

안녕 얘들 아 내 코드입니다 :아약스 재귀 함수 작업 이상한

var ajax={ 
    chiamata:function(target,url,opzioni){ 
     if (!tools.array_key_exists('caricamento',opzioni)){ 
      opzioni['caricamento']=1; 
     } 
     var dati=url.split('?'); 
     $.ajax({ 
      type: opzioni['type'], 
      url: url, 
      contentType:"application/x-www-form-urlencoded; charset=UTF-8", 
      data: dati[1], 
      dataType: "html", 
      success: function(msg){ 
       if (opzioni['caricamento']!=0){ 
        ajax.printLoading(); 
       } 
       $(target).html(msg); 
      }, 
      error: function(){ 
       alert("Chiamata fallita!"); 
      } 
     }) 
    }, 
    printLoading:function(){ 
     var body="#colonnaDX"; 
     $(body).ajaxStart(function(){ 
      $(body).append('<div id="loading"><img src="graphic/IMAGE/spinner.gif"/>Loading...</div>'); 
     }) 
     .ajaxStop(function(){ 
      $('#loading').remove(); 
     }); 
    } 
},   
//Recursive function 
var object={ 
    checkAzione:function(target,url,opzioni,interval){ 
     if (!interval) 
      interval=60000; 
     ajax.chiamata(target,url,opzioni); 
     setTimeout(function() { 
      this.checkAzione(target,url,opzioni,interval); 
     }, interval); 
    } 
} 
$(document).ready(function(){ 
    object.checkAzione(
     '#colonnaDX', 
     'someactions.php',{ 
      'caricamento':0 
     }, 
     10000 
    ); 
}) 

나는 내가 할 수있는 더 나은로 문제를 설명하려고합니다 문서는 기능 "checkAzione"시작하고 있습니다 준비가되면 DB를 호출하는 등 일부 물건, 아약스 호출 의이 종류의 배열 "opzioni"그래서 'caricamento'플래그를 설정하는 스피너 등 모든 시각적로드가 필요하지 않습니다 : 0 ('로드 중': 0 같은) 그냥 내 확인 아약스 객체가 무슨 뜻인지 알기 위해, 'caricamento'를 사용하여 몇 가지 아약스 호출을 할 때까지 작동합니다. 1, 그 순간부터 모든 재귀 함수에서 모든 아약스 호출이 "printLoading"을 호출합니다.

+1

이벤트를 ajaxStop 및 ajaxStart에 바인딩하면 바인딩 한 요소를 제거하거나 해당 이벤트를 바인딩 해제 할 때까지 사라지지 않습니다. 로더를 표시하고 숨기려면 beforeSend 및 complete를 사용하는 것이 좋습니다. –

답변

0

ajaxStartajaxStop입니다. 인 경우 본문에 추가하십시오. 이 경우에는 ajaxStart/Stop을 사용하지 말아야하며, Ajax 리스너에 기능을 추가하면됩니다 (성공 및 오류).