Yii Framework Forum: Dynamiczna zawartość strony (PHP i AJAX) - Yii Framework Forum

Jump to content

Page 1 of 1
  • You cannot start a new topic
  • You cannot reply to this topic

Dynamiczna zawartość strony (PHP i AJAX) Rate Topic: -----

#1 User is offline   lograiden 

  • Newbie
  • Yii
  • Group: Members
  • Posts: 9
  • Joined: 11-November 11
  • Location:Poland

Posted 13 November 2011 - 02:24 PM

Cześć, mam irytujący problem z którym nie mogę sobie od dłuższego czasu poradzić, w skrócie:
Chcę żeby na stępujący kod:

echo 'first';
sleep(1);
echo 'second';
sleep(1);
echo 'third';

pojawiał się linia po linii.

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:


<button onclick="execute('/ESWebPanel/panel/test');">Click</button>

oraz

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...
0

#2 User is online   sidewinder 

  • Standard Member
  • PipPip
  • Yii
  • Group: Members
  • Posts: 210
  • Joined: 08-July 09
  • Location:Poland

Posted 14 November 2011 - 03:32 AM

Co do ajax-http-stream:

Quote

NOTE: It has come to my attention that this no longer works as of Firefox 3.0.11 (works in 3.0.8 on linux), IE8, or the latest version of Chrome. Apparently the trend is to disallow access to the xmlhttprequest.responseText before the request is complete (stupid imo). Sorry there's nothing I can do to fix this


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...
---------------------------------------------------------------------
"Never memorize what you can look up in books."
Albert Einstein
0

#3 User is offline   lograiden 

  • Newbie
  • Yii
  • Group: Members
  • Posts: 9
  • Joined: 11-November 11
  • Location:Poland

Posted 14 November 2011 - 04:36 AM

Wiem o tym, to był tylko przykładowy kod, na serwerze dałam:

function force_flush(){ ob_end_flush(); flush(); }
    
    error_reporting(0);
    for($i = 1; $i < 6; $i++)
    {
        echo $i . ', ';
        force_flush();
        sleep(1);
    }
    error_reporting(-1);


(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.

Quote

this no longer works as of Firefox 3.0.11 (works in 3.0.8 on linux), IE8, or the latest version of Chrome. Apparently the trend is to disallow access to the xmlhttprequest.responseText before the request is complete
- przykład ze strony którą podałam działa mi na Firefox'e 7.0.1 i Chromie 15.0.8...
0

#4 User is online   sidewinder 

  • Standard Member
  • PipPip
  • Yii
  • Group: Members
  • Posts: 210
  • Joined: 08-July 09
  • Location:Poland

Posted 15 November 2011 - 05:01 AM

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:
1. Ścieżka względna... Spróbuj wpakować tam ścieżkę bezwzględną. Tu możesz wykorzystać createUrl().
2. 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 :).
---------------------------------------------------------------------
"Never memorize what you can look up in books."
Albert Einstein
1

#5 User is offline   lograiden 

  • Newbie
  • Yii
  • Group: Members
  • Posts: 9
  • Joined: 11-November 11
  • Location:Poland

Posted 19 November 2011 - 09:59 AM

Dzięki za wskazówki, masz rację co to tej wtyczki, zastosuję chyba metodę Long polling.
0

Share this topic:


Page 1 of 1
  • You cannot start a new topic
  • You cannot reply to this topic

1 User(s) are reading this topic
0 members, 1 guests, 0 anonymous users