2012-09-17 3 views
0

윈도우 popstate 이벤트에 바인드하는 AJAX 호출이 있습니다. 그것은 쿼리 문자열에서 인수를 파싱한다는 점을 제외하면 작동합니다. 문제는 페이지가로드 될 때 Ajax 호출이 창에 바인딩되므로 URL이 변할 때 내 인수가 변경되지 않는다는 것입니다. 리스너를 창에 추가하면 Ajax 호출을 바인딩하는 대신 실행할 수 있다면 매번 쿼리 문자열을 다시 구문 분석 할 수 있습니다.drupal에서 bind() 대신 ajax 호출을 실행하십시오.

예를 들어 페이지가 domain.com?x=1 & y = 2를로드하면 내 호출은 x = 1 및 y = 2를 보냅니다. 그러나 popstate가 발발하고 domain.com? x = 1 & y = 2 & z = 3이되면 x = 1과 y = 2를 보냅니다.

여기 내 전화 뭔가이 일을하고 무슨 생각

var ajax_path = Drupal.settings.views.ajax_path; 
$.each(Drupal.settings.views.ajaxViews, function (i, settings) { 
    var view = '.facetapi-facetapi-links'; 
    element_settings = { 
     url: ajax_path, 
     submit: settings, 
     setClick: false, 
     event: 'popstate', 
     selector: view, 
     progress: { type: 'throbber' } 
    }; 
    var viewData = {}; 
    $.extend(
     viewData, 
     settings, 
     Drupal.Views.parseQueryString(document.URL), 
     Drupal.Views.parseViewArgs(document.URL, settings.view_base_path) 
    ); 
    $.extend(viewData, Drupal.Views.parseViewArgs(document.URL, settings.view_base_path)); 
    element_settings.submit = viewData; 
    var ajax = new Drupal.ajax(false, window, element_settings); 
}); 

,하지만 난 방법을 잘 모르겠어요. 또는 Drupal.ajax.prototype.beforeSendend를 사용하는 것이 가능합니까?

window.addEventListener("popstate", function(e) { 
    //execute ajax here so it reparses document.url 
} 

답변

0

가 나는 경우 수동으로

window.addEventListener("popstate", function(e) {   
    $(window).unbind('custom'); 
    $.each(Drupal.settings.views.ajaxViews, function (i, settings) { 
     element_settings = { 
      url: Drupal.settings.views.ajax_path, 
      submit: settings, 
      setClick: false, 
      event: 'custom', 
      selector: '.facetapi-facetapi-links', 
      progress: { type: 'throbber' } 
     }; 

     var viewData = {}; 
     $.extend(
      viewData, 
      settings, 
      Drupal.Views.parseQueryString(document.URL), 
      // Extract argument data from the URL. 
      Drupal.Views.parseViewArgs(document.URL, settings.view_base_path) 
     ); 

     $.extend(viewData, Drupal.Views.parseViewArgs(document.URL, settings.view_base_path)); 

     element_settings.submit = viewData; 

     var ajax = new Drupal.ajax(false, window, element_settings); 
     console.log(element_settings); 
    }); 
    $(window).trigger('custom'); 
}); 
를 실행할 수 있도록, 내가, 사용자 정의 이벤트를 사용하고이 솔루션을 함께했다
관련 문제