2009-06-03 2 views
2

최근에 Prototype에서 jQuery으로 전환하는 중 일부 기본 문제로 고민하고 있습니다.jQuery에서 전역 아약스 이벤트로 로컬을 모두 실행하는 방법은 무엇입니까?

내 응용 프로그램에서 여러 AJAX 요청을 사용합니다. 이러한 요청의 95 %에 대해 로딩 표시기를 표시하거나 숨기는 것과 같은 일부 글로벌 이벤트를 실행하고 싶습니다. 전역 기능 외에도 모든 요청에는 완료된 후 실행되는 사용자 정의 코드가 있어야합니다.

일단 로컬이 설정되면 글로벌 주소를 무시하는 것처럼 보입니다. 예를 들어, 다음 코드를 살펴 보자 :이 특별한 경우

// global events 
$('#loader').bind('ajaxStart', function() { 
    // in this particular example, the ajaxStart() works fine, 
    // as it has not been overridden 
    Loader.enable(); 
}).bind('ajaxComplete', function() { 
    // this section will not execute. when the local complete() 
    // is removed, it will execute just fine 
    Loader.disable(); 
}); 

// local ajax event 
$.ajax({ 
    type: $(element).attr('method'), 
    url: $(element).attr('action'), 
    data: $(element).serialize(), 
    global: 'true', 
    complete: function(data) { 
     if (params.target && $('#' + params.target)) { 
      $('#' + params.target).html(data.responseText); 
     } 
     Behaviour.apply(); 
}); 

을, 지역 전체() 이벤트가 실행에서 글로벌 ajaxComplete() 이벤트를 중지하는 것 같다.

글로벌 AJAX 이벤트로 로컬을 실행할 수있는 방법이 있습니까?

답변

0

먼저 주셔서 감사합니다 답장. 두 사람 모두 내 코드 시간과 시간을 다시 평가하는 데 적어도 도움이되었습니다.

내 로컬 complete 이벤트에서 호출 된 Behaviour.apply(); 정확하고 효과적으로 글로벌 ajaxComplete() 이벤트를 해제 완료 할 complete() 방지 기능을, 다른 오류를 트리거 :

는 문제와 해결책은 매우 간단 밝혀졌다 . 이 오류를 수정하면 내 문제가 해결됩니다.

이것은 jQuery를 모두 지역글로벌 아약스 이벤트를 함께 지원하는 것을 의미한다.

3

나는 그것을 시도하지 않은,하지만 당신은 왜 글로벌 방법 생성되지 않습니다

function globalAjaxComplete(data) 

글로벌 및 지역 이벤트 핸들러 모두에서 전화를?

또한 클래스 "ajaxEnabled"를 정의하고이 작업을 수행 할 수 있습니다 :

$(".ajaxEnabled").bind("ajaxStart", 
    Function() { globalAjaxComplete(); }); 

는 그런 다음 글로벌 방법을마다 호출 할 필요가 없다.

그러나 왜 로컬 바인딩이 전역 바인딩을 취소하는지 아직 알 수 없습니다.

+1

아직 시도하지는 않았지만 틀림없이 작동합니다.이 경우 모든 AJAX 요청에 대해이 구조체를 사용해야하지만 이는 실제로 코드를 향상시키지 못합니다. –

4

코드를 실행하려했습니다. 누락 된 추가}}); 그래도. 매력처럼 일했습니다. 통화가이 순서로 이루어졌다 :

  1. ajaxStart
  2. 완전한
  3. ajaxComplete 여기

내가 무슨 짓을 : 모든

// local ajax event 
$.ajax({ 
    ... 
    global: 'true', 
    complete: function(data) { 
     ... 
    } 
}); // <=== This line here 
+0

오류는 지금 수정되었지만 잘못된 붙여 넣기로 인해 발생했습니다. 이건 내 문제를 해결하지 못합니다. –

관련 문제