2013-05-09 19 views
5

Ponieważ pracuję z TinyMCE (proszę nie wchodzić w "Primefaces ma edytor" lub coś podobnego) muszę wykonać mały kawałek Javascript przed i po co Ajax -call. Wolałbym nie edytować wszystkiego, ponieważ jest ich dużo (i będzie to zła praktyka dla przyszłych konserwacji).JavaScript na (przed i po) każdym Ajax-call

Jakie byłoby najbardziej eleganckie rozwiązanie do wykonania Javascript przed i po jakakolwiek Ajax -cała na stronie?

Uwaga: Używam niestandardowego composite dla adresu TinyMCE -tekst. Wszelkie zdarzenia również ten obiekt też by wystarczyć. Pamiętaj jednak, że faktyczny Ajax -trigger może zostać wywołany przez zupełnie inny obiekt (mimo to może zrestartować composite).

Odpowiedz

7

Użyj funkcji obsługi jsf.ajax.addOnEvent.

jsf.ajax.addOnEvent(function(data) { 
    switch(data.status) { 
     case "begin": 
      // This is invoked right before ajax request is sent. 
      break; 

     case "complete": 
      // This is invoked right after ajax response is returned. 
      break; 

     case "success": 
      // This is invoked right after successful processing of ajax response and update of HTML DOM. 
      // In case you're interested in error handling, use jsf.ajax.addOnError handler. 
      break; 
    } 
}); 

Wystarczy umieścić go w pliku JS, który jest zawarty przez <h:outputScript target="head"> w <h:body> żądanych stron. Zapewni to, że jest on załadowany po JSF własny jsf.js zawierający przestrzeń nazw .

+0

Kolejna wspaniała odpowiedź BalusC, dzięki! :) – Aquillo

+0

Wpadłem na problem przy użyciu 'jsf.ajax.addOnEvent', którego nie jestem w stanie rozwiązać, czy możesz rzucić okiem (aktualizacja na pytanie)? – Aquillo

+0

Najwyraźniej nie używasz '' do wywoływania wywołania ajaxowego. – BalusC

0

Istnieje atrybut onevent znacznika JSF <f:ajax>, który jest używany do wykonywania zadań AJAX w aplikacji JSF. Zasadniczo określa on funkcję JavaScript, która nazywa się trzykrotnie: przed wywołaniem wywołania AJAX, po odebraniu odpowiedzi AJAX i po aktualizacji DOM HTML. Dokładnie w tym celu PrimeFaces podzielił te wywołania zwrotne odpowiednio na onstart, onsuccess, oncomplete i .

Aby nie powtarzać, można znaleźć przykład zastosowania w odpowiedzi na How to re-execute javascript function after form reRender?.

+0

Tak, wiem, ale to oznaczałoby, że muszę edytować każde "Ajax" na mojej stronie. Jak powiedziałem w moim pytaniu, szukam sposobu, aby tego uniknąć. Np .: "f: event", które jest wyzwalane podczas każdego "połączenia Ajax" na stronie. – Aquillo

+0

W tym przypadku można zbadać jsf.js i utworzyć kilka funkcji pomocnika JS, aby wysyłać żądania ajax nie za pomocą znaczników, ale za pomocą JavaScript. – skuntsel

+0

Hmm to rozważy, nie ma domyślnego "JSF", że tak powiem? – Aquillo

Powiązane problemy