Autor Zpráva
Bouda
Profil
Dobrý den.

Řeším problém. Používám XMLHttpRequest.
Vše funguje v pořádku, ale když se mi znovunačte požadovaný div a v něm chci JS provést nějakou akci tak nevím jak na to.
Prootže se mi nenačte celá stránka, ale jen požadovaný div, tak onload nefunguje. Zatím to obcházím použitím onmouseover - v tu chvíli se mi požadovaná akce spustí (ale musím na divem lítat s myší :) ).

Nevíte jak tento proces automatizovat?
Doufam, že jem to popsal trošku srozumitelně (honí se mi v hlavě spousta myšlenek a neumím je popsat :D )
Pro představu co obsahuje nový div
 $Pocet = count($result); 
                  echo '<TEXTAREA NAME="prispevek_up" ROWS=6 COLS=50 on'.'mouseover=\'ajax("upload2.php", "form3", {val: prispevek_up.value});\'>';
                  for ($i = 1; $i < $Pocet; ++$i) {
                  echo  $result[$i]."\n";
                  }
                  echo '</TEXTAREA>';


Díky Bouda
joe
Profil
Do toho divu, kde měníš ten obsah vlož také skript:
<script type="text/javascript">
ajax("upload2.php", "form3", {val: prispevek_up.value});
</script>
Bouda
Profil
joe:
hm, tak asi někcde dělám něco špatně. Pokusil jsem se do těla scriptu dát alert, ale nic mi nevyskoří při reloadu divu.
Prostě na scripty v nově načteném divu mi to vůbec nereaguje :( Pokud je nevyvolá např onmouseover.
joe
Profil
Asi máš pravdu, asi určitě, takhle to nepůjde, nevím proč mě to napadlo.

Já moc nechápu, kde vlastně poprvé voláš tu funkci ajax() nebo kde ji tomu formuláři nastavuješ a co vlastně překresluješ AJAXem. Pokud tu funkci máš v kódu HTML - onsubmit="ajax(..)" a překreslíš celý formulář, neměl by být problém.
Bouda
Profil
joe:
Poprvé jí zavolam metodou onclick. na tlačítku pod textarea.
Pak se mi načte první řádek provede se akce a do textarea se mi vrátí zbytek bez prvního řádku.
poté pokud existuje další řádek, tak bych potřeboval, aby se to automaticky rozběhlo znova.
Řeším to tak, že do echa přidám tu část se scriptem a až by nebyl řádek, tak jí tam nedam.

Jen s tím problémem, že to nefunguje :D Teda když tam ddam to mouseover, tak to tak nějak probíhá...
_es
Profil
Bouda:
funkcia ajax je definovaná kde, alebo odkiaľ si ju skopíroval?
Do toho divu to asi zapisuje pomocou metódy innerHTML a tá nespúšťa elementy <script>.
Pri načítaní pomocou AJAXu vzniká udalosť, využiteľná na vykonanie potrebných vecí.
joe
Profil
Bouda:
A máš někde živou ukázku? Pak ti s tím poradím, takhle toho pořád moc nevím :)
Bouda
Profil
asi na to celé jdu od začátku špatně. Ukázku bych musel poskládat, potože mi to běží lokálně a ještě k tomu v několika souborech :)

Potřebuju ze seznamu.
Obr1.jpg
obr2.jpg
obr3.jpg
Vždy vzít jeden po druhém a udělat.
copy("test1/Obr1.jpg", "Kopie/Obr1.jpg");

Když to udělám v aktuálním okně, tak se na celou dobu zasekne a uživatel vidí jen stránku co neodpovídá. (navíc po nastavené době
@set_time_limit(1* 30); zfailuje.

Snažím se o to, aby se po každém zkopírovaném obrázku u uživatele objevila odezva (a nenačíltala se celá stránka, ale jen jeden div).

Jinak xmlhttprequest jsem defakto kopíroval tenhle: http://diskuse.jakpsatweb.cz/?action=vthread&forum=8&topic=108533 Protože moje původní verze neuměla pracovat s POST.


Můj momentální stav je takový, že to můžu celé poslat najednou (neestetické). Nebo se mi povede poslat jen první soubor
(Ajaxem metodou post pošlu seznam a zpracuju v souboru upload2.php => Projdu seznam, odeberu první řádek, zpracuju ho zkopiruju file, a vrátím seznam bez prvniho řádku a vysledek operace do divu na původní stránce.)
teď jsem na stránce, kde je aktualizovaný seznam a potřebuju, aby se to znovu rozjelo, dokun nebude seznam prázdný, nebo nenastane nějaká chyba :( Což mi nejde.
joe
Profil
Do funkce v JavaScriptu, která se stará o výpis odezvy na stránce přidej (ale jen pro tento případ - musíš si to nějak odlišit, nějakým parametrem například), že si vytvoříš element script:
var script = document.createElement('script');
A ten vložíš do hlavičky dokumentu, tím se provede to, může skript provést znovu.
Pro posílání souboru přes AJAX by ale bylo lepší zvolit jinou metodu, namísto XmlHttpRequest využít rámce ((i)framy).
_es
Profil
joe:
si vytvoříš element script
Nepotrebuje vytvárať nové dynamické skripty, treba spraviť aplikáciu tak, aby si vystačila s už načítanými skriptami.

Pro posílání souboru přes AJAX by ale bylo lepší zvolit jinou metodu, namísto XmlHttpRequest využít rámce ((i)framy).
Ja som to pochopil tak, že ide o súbory na serveri a nejaké vzdialené operácie s nimi cez web.

Bouda:
Do funkcie, priradenej do ajax_object.onreadystatechange do toho bloku if, vlož to, čo treba: zavolaj napríklad nejakú funkciu, ktorá spraví to, čo chceš a pod.
joe
Profil
_es:
No jestliže chce provést nějaký JavaScript podle toho, co mu vrátí server po jednom požadavku, tak potřebuje nějak zpracovat JavaScriptem výstup. A číst to například z nějakého innerHTML, to je docela fuj nebo nevím jak jsi to myslel. Já stejně pořádně moc nechápu, co chce udělat.
_es
Profil
joe:
potřebuje nějak zpracovat JavaScriptem výstup.
Ale netreba, aby v tom výstupe boli elementy <script>, mal by spraviť aplikáciu tak, aby si vystačila s už načítanými <script>ami.

Já stejně pořádně moc nechápu, co chce udělat.
No, a na tom by mal Bouda viac zapracovať.

Vaše odpověď


Prosím používejte diakritiku a interpunkci.

Ochrana proti spamu. Napište prosím číslo dvě-sta čtyřicet-sedm:

0