행동에서 AJAX 완료 이벤트 듣기


12

AJAX 버튼이있는 양식이 있습니다. 클릭하면 예상대로 많은 것들이 업데이트됩니다.

AJAX 호출이 완료되면 호출되는 리스너를 작성하는 방법이 있는지 궁금합니다.

감사

답변:


19

예, 있습니다 :

Drupal.behaviors.YourBehaviour = {
attach: function(context, settings) {  
  $('#yourform').ajaxComplete(function(event, xhr, settings) {
    if ($(event.target.id) == 'the-id-of-your-item') {
      // Your code here
    }
  });
 }
}

2
+1, Drupal 7의 경우Drupal.behaviors.YourBehaviour = { attach: function() { $('#yourform').ajaxComplete...
Clive

당신이 맞습니다 : 붙여 넣는 동안 줄을 잊어 버렸습니다!
Countzero

2
이 $ () 필요하지 않습니다. event.target.id 객체를 참조하지 않습니다
Nikola

왜 드루팔 행동으로 감쌀까요?
ram4nd

1
모범 사례로 간주되고 네임 스페이스 충돌을 방지하기 때문에 무엇보다도.
Countzero

11

jQuery 1.8 이상 버전의 경우 이제 양식 또는보기 자체가 아닌 .ajaxComplete 함수를 문서에 첨부해야합니다 ( http://api.jquery.com/ajaxcomplete/ 참조 ).

다음은 Jquery 1.10 및 Views 7.x-3.8을 사용하여 D7에서 나에게 도움이되었습니다. 여기서 "your_view_id"는보기의 "기타"설정 패널에 설정된보기의 시스템 이름입니다. 이벤트, xhr 및 ajax 결과가 원하는보기에 대한 것인지 결정하기 위해 설정해야 할 다른 많은 정보가 있지만 이것은 내 상황에서 효과적이었습니다.

jQuery(document).ajaxComplete(function(event, xhr, settings) {
    if(typeof settings.extraData != 'undefined' && typeof settings.extraData.view_display_id != 'undefined') {

        switch(settings.extraData.view_display_id){

            case "your_view_id":

                console.log('your_view_id ajax results!');

                break;

            default:

                console.log('some other ajax result...');

                break;

        }
    }

});

4

주어진 솔루션 중 어느 것도 Drupal 7.24, jQuery 1.11Views 7.x-3.8에서 효과가 없었습니다 .

무엇 user1193694 제안하는 것은 나쁘지 않았다,하지만 설정은 내가하지 않았다받은 객체 extraData의 매개 변수를.

설정 객체를 파싱 할 때 settings.data 속성에 ' view_name = '및 뷰의 머신 이름이 포함되어 있음을 알았으므로 필터링 대상은 다음과 같습니다.

jQuery(document).ajaxComplete(function(event, xhr, settings) {

    // see if it is from our view
    if (settings.data.indexOf( "view_name=your_views_name") != -1) {

            console.log('your_view_id ajax results!');

    }
});

' your_views_name '을보기의 기계 이름으로 바꾸십시오.

당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.