2012-03-07 3 views
1

당신을위한 brainteaser.제네릭 함수의 인수를 기반으로 동적으로 ajax 처리기를 추가하십시오.

이 일반 JS 함수를 작성했습니다. 우리 시스템은 AJAX를 통해 모든 비즈니스 로직을 수행하며 코드를 단일 함수로 통합하므로 코드베이스 전체에 걸쳐 동일한 코드 사본을 3 백만 개 이상 유지 관리 할 필요가 없습니다.

doRequest = function (data,msgBoxElem,origin) { 
$.ajax({ 
    type: "POST", 
    url: window.dispatcher_addr, 
    data: data, 
    dataType: "xml", 
    contentType: "text/xml", 
    processData: false,  
    success: function(xml) { 
    $(msgBoxElem).html(xml.documentElement.getAttribute("msg")); 
    location.reload(); 
    }, 
    error:function (xhr, ajaxOptions, thrownError){ if (thrownError != 200) { 
    var Data = new Array(); 
    Data["errorcode"]  = xhr.status; 
    Data["errortext"]  = thrownError; 
    Data["calling_script"] = origin; 
    $.ajax({ 
     type: "POST", 
     url: window.dispatcher_addr, 
     data: CreatePayLoad('jslogerror',Data), 
     dataType: "xml"   
    }); 
    }  
    }  

}); }

이제 일부 페이지에는 $ .ajax()에 대한 성공, 오류 및 완료 처리기에서 실행되는 특정 논리가 있습니다. 내가 알고 싶은 것은 $ .ajax()에 인수를 전달할 수 있다면 커스텀 핸들러를 실행한다는 것이다.

고마워요.

미디안.

+0

보고 싶을 것이다 글로벌 아약스 방법의 제품군도 있습니다 t는'success','error'와'complete'를 취할 수 있고, 호출 될 때'$ .ajax()'를 호출 할 다른 함수를 반환합니까? 답장을 보내 주셔서 감사합니다. –

답변

2

하나 이상의 콜백 인수를 함수에 추가하면 기본 핸들러를 대체하거나 그 외의 메소드 (구현 방법)를 실행할 수 있습니다. 당신이 발신자의 코드는 기본 구현 대신 실행하기를 원한다면이처럼 할 수있는,

doRequest = function (data,msgBoxElem,origin,fnSuccess) { 
    $.ajax({ 
     type: "POST", 
     url: window.dispatcher_addr, 
     data: data, 
     dataType: "xml", 
     contentType: "text/xml", 
     processData: false,  
     success: function(xml) { 
     $(msgBoxElem).html(xml.documentElement.getAttribute("msg")); 
     fnSuccess(); 
     location.reload(); 
     }, 
     error:function (xhr, ajaxOptions, thrownError){ if (thrownError != 200) { 
     var Data = new Array(); 
     Data["errorcode"]  = xhr.status; 
     Data["errortext"]  = thrownError; 
     Data["calling_script"] = origin; 
     $.ajax({ 
      type: "POST", 
      url: window.dispatcher_addr, 
      data: CreatePayLoad('jslogerror',Data), 
      dataType: "xml"   
     }); 
     }  
     }  
    }); 
} 

또는 : 여기에 당신이 정의한 기본 동작에 추가하여 실행하는 fnSuccess 콜백의 예 :

doRequest = function (data,msgBoxElem,origin,fnSuccess) { 
    $.ajax({ 
     type: "POST", 
     url: window.dispatcher_addr, 
     data: data, 
     dataType: "xml", 
     contentType: "text/xml", 
     processData: false,  
     success: function(xml) { 
      if (fnSuccess) { 
       fnSuccess(xml); 
      } else { 
       $(msgBoxElem).html(xml.documentElement.getAttribute("msg")); 
       location.reload(); 
      } 
     }, 
     error:function (xhr, ajaxOptions, thrownError){ if (thrownError != 200) { 
     var Data = new Array(); 
     Data["errorcode"]  = xhr.status; 
     Data["errortext"]  = thrownError; 
     Data["calling_script"] = origin; 
     $.ajax({ 
      type: "POST", 
      url: window.dispatcher_addr, 
      data: CreatePayLoad('jslogerror',Data), 
      dataType: "xml"   
     }); 
     }  
     }  
    }); 
} 
+0

그냥 이해하고 싶어 : 나는 매개 변수 목록에서 fnSuccess를 볼 수 있습니다. 함수에서 어떻게 호출 할 수 있는지 보여 주시겠습니까? 감사합니다 ... – Mina

+0

아, 지금 당장! 감사! 말된다. – Mina

+0

@Midiane - 내 대답에는 두 가지 예제가 있습니다. – jfriend00

관련 문제