• Najnowsze pytania
  • Bez odpowiedzi
  • Zadaj pytanie
  • Kategorie
  • Tagi
  • Zdobyte punkty
  • Ekipa ninja
  • IRC
  • FAQ
  • Regulamin
  • Książki warte uwagi

EventSource - problem z kodem

VPS Starter Arubacloud
0 głosów
173 wizyt
pytanie zadane 6 grudnia 2016 w JavaScript przez Assasz Nałogowiec (30,460 p.)

Witam.

Otóż przesyłam pewne dane z serwera za pomocą server-sent events. Służą mi do tego dwa poniższe kawałki kodu:

    header("Content-Type: text/event-stream");
	header('Cache-Control: no-cache');
	session_start();

	$data = file_get_contents("chat.txt");
	$trimmed = rtrim($data, "\n");
	$data_array = explode("\n", $trimmed);
	$last_line = end($data_array);

	if($last_line != $_SESSION['last_line'])
	{
	    echo "data: $last_line\n\n";
	    echo "rentry: 1000\n";
	    $_SESSION['last_line'] = $last_line;
	}

	$group=$_SESSION['group'];
	$connect = new PDO('mysql:host=localhost;dbname=test', 'root', '');
	$status = $connect-> query("SELECT user, expire, online FROM php WHERE id_group=$group");

	$users_online="";
	while($row=$status->fetch())
	{
		if($row['expire']>$row['online'] || $row['user']==$_SESSION['user'])
		{
			$users_online.=$row['user']." ";
		}
	}
	echo "online: {$users_online}\n\n";

  	flush();
var chatStream = new EventSource("chat_stream.php");
chatStream.onmessage = function(e) 
{ 
  	var chat = document.getElementById('chat');
  	chat.innerHTML += e.data;
	chat.lastChild.scrollIntoView(false);

	var string = e.online;
	var users = string.split(" ");
	var i=0;
	while(users[i]!=null)
	{
		document.getElementById("status-"+users[i]).className="online";
		i++;
	}
}

Problem tkwi w tym, że nic od 8 linii we fragmencie kodu JavaScript się nie wykonuje, nawet jeśli chcę coś wyświetlić w konsoli. Nie mam pojęcia o co chodzi, a męczę się z tym już długo. Dodam, że dane przesyłają się prawidłowo, a pierwsza część kodu JS działa tak jak powinna.

Z góry dzięki za pomoc.

komentarz 7 grudnia 2016 przez ScriptyChris Mędrzec (190,190 p.)

nic od 8 linii we fragmencie kodu JavaScript się nie wykonuje

8 linijka to: 

   var string = e.online;

Wyświetl zatem obiekt e na górze funkcji i zobacz czy jest tam pole online.

Możesz również owinąć 8 linijkę w konstrukcję try..catch i wyrzucić błąd. Włącz też tryb strict i obserwuj konsolę - być może pojawią się wtedy jakieś konkretne błędy dotyczące błędnego kodu.

Zaloguj lub zarejestruj się, aby odpowiedzieć na to pytanie.

Podobne pytania

0 głosów
1 odpowiedź 247 wizyt
pytanie zadane 1 grudnia 2016 w PHP przez Assasz Nałogowiec (30,460 p.)
+1 głos
2 odpowiedzi 1,105 wizyt
pytanie zadane 21 lipca 2019 w JavaScript przez Pytajnikowiec Początkujący (290 p.)
+2 głosów
0 odpowiedzi 165 wizyt
pytanie zadane 22 kwietnia 2019 w Nasze projekty przez Gambr Dyskutant (7,530 p.)

93,023 zapytań

141,986 odpowiedzi

321,288 komentarzy

62,368 pasjonatów

Motyw:

Akcja Pajacyk

Pajacyk od wielu lat dożywia dzieci. Pomóż klikając w zielony brzuszek na stronie. Dziękujemy! ♡

Oto polecana książka warta uwagi.
Pełną listę książek znajdziesz tutaj

Wprowadzenie do ITsec, tom 2

Można już zamawiać tom 2 książki "Wprowadzenie do bezpieczeństwa IT" - będzie to około 650 stron wiedzy o ITsec (17 rozdziałów, 14 autorów, kolorowy druk).

Planowana premiera: 30.09.2024, zaś planowana wysyłka nastąpi w drugim tygodniu października 2024.

Warto preorderować, tym bardziej, iż mamy dla Was kod: pasja (użyjcie go w koszyku), dzięki któremu uzyskamy dodatkowe 15% zniżki! Dziękujemy zaprzyjaźnionej ekipie Sekuraka za kod dla naszej Społeczności!

...