Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: [JavaScript] Problem z Request() i setTimeout()
Forum PHP.pl > Forum > Przedszkole
Skie
Witam,
Ten temat co prawda nawiązuje do tematu, który poprzednio założyłem, ale dotyczy innego problemu więc zdecydowałem założyć osobny topic.

A więc tak, Request'em w koncu udalo mi sie pobrac plik JS.

Zastosowałem funkcję eval() w poniższy sposób:

Kod
eval(req_js.responseText);


Sprawdziłem czy działa - okazało się, że tak.... ale z jednym problemem.

Plik JS jest klasą zawierającą kilka metod, a w tym jedna, mianowicie battle.Animation(id) która wykonuje się kilka razy (tj. na samym koncu funkcja sprawdza czy skrypt "przeanalizowal" cala tablice - jezeli nie to ta metoda wywoluje sama siebie ponownie z innym parametrem 'id').

Niestety po pierwszym wykonaniu pętli "gubi" się gdzieś klasa battle. (battle undefined) i skrypt konczy swe dzialanie.

O ile ten plik (JS) dzialal dobrze, gdy byl normalnie wczytywany to przy zastosowaniu eval() cos sie chrzani.
Może mi ktoś wytłumaczyć dlaczego?

EDIT:
Edytowałem temat gdyż odkryłem co się chrzani. Gdy podmienię

Kod
setTimeout('battle.Animation('+id+');', battle.Time);


na

Kod
battle.Animation(id);


To wszystko działa. Niestety to rozwiązanie mnie nie zadowala, gdyż głównym zastosowaniem tej klasy jest właśnie wyświetlanie tych wyników co określony czas a nie wszystko razem.
lord_t
Zastosuj się do posta @revyag w temacie http://forum.php.pl/index.php?showtopic=10...mp;#entry510346 i będzie wszystko grać.
Skie
Jeżeli chodzi Ci o

Kod
eval('('+req_js.responseText+')');


To ten sposób w ogóle nie działa, natomiast jeśli chodzi o jQuery - nie będę przecież "wmontowywał" biblioteki tylko dla jednego pliku.
lord_t
Prawie to samo robi zdarzenie onload dla body:
  1. <body onload="init();">
  2. ...


A co do jQuery'owego ready to są krótkie skrypty które robią to samo (szukaj w google: domready js)
Skie
Tak, to być może byłby dobry patent, gdyby nie to, że wszystko w znacznikach <scirpt> i </script> jest blokowne.

Nawet takie cuś nie zadziała:

Kod
<script type=text/javascript>
alert('error');
</script>
lord_t
Musi działać. Jakieś błędy w firebugu?
Skie
Gdyby działał to by się wyświetlił ten komunikat. A jakoś tego nie widzę. Zdaje się że Request AJAXa blokuje skrypty JS w wywolanym pliku.
lord_t
Umieściłeś to
  1. <script type=text/javascript>
  2. alert('error');

i
to body onload... w głównym pliku?

W tamtym temacie bodajże revyag pisał, żebyś opakował skrypt, który teraz chcesz dołączać ajaxem w funkcji np.init()
To ja się teraz pytam po co Ci AJAX?!
To jest wersja lo-fi głównej zawartości. Aby zobaczyć pełną wersję z większą zawartością, obrazkami i formatowaniem proszę kliknij tutaj.
Invision Power Board © 2001-2025 Invision Power Services, Inc.