Właściwie to znalazłam rozwiązanie korzystając z jQuery AJAX Http Stream (tutaj przykładowy kod: plugins.jquery.com/project/ajax-http-stream), ale nie potrafię sobie poradzić z implementacja tego w frameworku Yii. Wiem że jest metoda ajaxSubmitButton w CHtml, ale przeczytałam całą dokumentację, wszystkie przykłady jakie tylko znalazłam i dalej nie działa. Ostatnio spróbowałam najprostszego rozwiązania, mianowicie:
function execute(path)
{
$.post(path,
function(data, status) /* On Request Complete */
{
alert(html(data));
},
function(packet, status, fulldata, xhr) /* If the third argument is a function it is used as the OnDataRecieved callback */
{
alert(html(data));
});
}
ścieżka wydaje się poprawna, ale dalej nic się nie dzieje (JavaScript się wykonuje, ale nie PHP). Mam akcję test w tym pliku, próbowałam zresztą załadować dowolny plik php (podaję ścieżkę względną, np: /ESWebPanel/php_file/file_to_load.php), ale dalej nie działa. Będę wdzięczna za jakąkolwiek pomoc…
Myślę, że warto popróbować z flush oraz z ob_flush, ale rezultat może być zmienny w zależności od rodzaju serwera, systemu na którym serwer pracuje oraz przeglądarki internetowej…
(wywalało warningi, dlatego dałam error_reporting()). Co do tego co napisałeś, to to nic nie da, jeśli nie ma callback’a OnDataRecieved i właśnie z dodaniem tego do Yii mam problem.
przykład ze strony którą podałam działa mi na Firefox’e 7.0.1 i Chromie 15.0.8…
No dobra… Na wstępie powiem, że w ogóle nie podoba mi się pomysł korzystania z plugina, który był wydany w jednej wersji, do starego JQuery, którego strona domowa nie działa, a autor sam przyznał, że nie rozwija wtyczki bo nie działa tak jak powinna z najnowszymi przeglądarkami. To, że działa teraz nie oznacza, że będzie działać w kolejnych wersjach przeglądarek. Nie wiem do końca co chcesz osiągnąć, ale na chwilę obecną przesyłanie danych z serwera do klienta jest najlepiej zaimplementowane w APE. Projekt specyfikacji HTML5 zawiera kanał komunikacji dwukierunkowej WebSocket oraz Server sent events. Ale to na razie projekt i różne przeglądarki inaczej to implementują. Więcej tutaj: http://dsheiko.com/w...ver-sent-events.
Ponieważ APE jest niezależnym serwerem (wymaga dostępu do konsoli na serwerze i trochę czasu na konfiguracje) najłatwiejszą emulacją technologii push jest odpytywanie serwera w określonych odstępach czasu. Na przykład co 10 sekund wysyłasz normalne zapytanie ajax i sprawdzasz czy stan obliczeń się zmienił itp.
To było słowem wstępu . Odpowiadając na Twoje pytanie, myślę, że będzie ciężko wykorzystać funkcje z klasy CHtml bez jej mocnego rozbudowania. Najłatwiej będzie faktycznie napisać z palca odpowiedni kod tak jak w przykładzie z adresu który podałaś. Piszesz, że javascript się wykonuje. Co z samym zapytaniem? Narzędziach developerskich przeglądarki (lub firebug) widzisz zapytanie i odpowiedź? Osobiście stawiam na 2 rzeczy:
Ścieżka względna… Spróbuj wpakować tam ścieżkę bezwzględną. Tu możesz wykorzystać createUrl().
Czy kontroler do którego się podłączasz korzysta z jakiegoś mechanizmu autoryzacji? Spróbuj dać do danej akcji dostęp wszystkim.
Tak na prawdę najważniejsze jest to, czy wywołanie javascript w ogóle powoduje wysłanie jakiegokolwiek zapytania do serwera. Sprawdź to w pierwszej kolejności.
edit: Pamiętaj również, żeby ustawić w konfiguracji php dłuższy czas wykonywania skryptu. Na hostingach współdzielonych najczęściej te 30s dają, ale widziałem też perełki 5 sekundowe .