Autor Zpráva
Dr.Neo
Profil *
Mam takovy problem s ajaxem v IE. U nad tim sedim dva dny. Udelal jsem si tridu na komunikaci pres AJAX. Proste se zavola stranka a ta se vlozi do urciteho divu. Problem ale nastava kdyz je na te strance ktera se vklada do divu dalsi javascript(myslim implicitni to co je v <script> ne zadne akce jako napriklad onClick.... ty se provadeji). Ten se totiz neprovede protoze to vkladam pres
document.getElementById(this.elementID).innerHTML = this.httpRequest.responseText;. Po dlouhem hledani jsem na netu nasel tuto funkci ktera scripty provede:

ajax_parseJs : function(){
var jsTags = document.getElementById(this.elementID).getElementsByTagName('SCRIPT') ;
for(i=0;i<jsTags.length;i++){
eval(jsTags[i].innerHTML);
}

ona vlastne vyhleda tagy <script> a vykova vse co je uvnitr. Jenze tady nastava problem. IE mi to nenajde vsechny tagy <script>.

<script type="text/javascript" language="javascript">
messageObj = new DHTML_modalMessage(); // We only create one object of this class
messageObj.setShadowOffset(5); // Large shadow
messageObj.setCssClassMessageBox(false);
messageObj.setSize(400,200);
messageObj.setShadowDivVisible(true); // Enable shadow for these boxes
</script>
<div id="login-user">
<a onclick="messageObj.setSource('ajax/ajax.php?page=index_major_news');m essageObj.display();return false;">ggsdtgsthstbgs</a>

</div>

<script type="text/javascript" language="javascript">
//jine javascripty
</script>

IE najde jen ten druhy <script> a ten se vykona. Problem je jen v IE. Ve FF a Opere to funguje tak jak ma.
Nesetkali jst se nekdo s podobnym problemem?Proc mi IE nechce najit vsechny tagy <script>. Nebo pripadne nejake jine reseni jak udelat funkci ajax_parseJs ktera mi implicitni JavaScipry proverde?
peta
Profil *
Dr.Neo
odkaz na stranku.
Pravdepodobne to mas cele spatne zapsane nebo IE nezna objekt "new DHTML_modalMessage()" a proto odmitne dal pokracovat ve vykonani.

Vsak si to schvalne vypis, co je v poli jsTags
var i,x; x="";
for (i in jsTags)
{x+="\n"+jsTags[i];}
alert(x);
Dr.Neo
Profil *
peta

opno ten html opravdu nezna "new DHTML_modalMessage()" ale on by se mel pres ajax nacist do nejakeho divu do hlavni stranky. A pak se zavola funkce ajax_parseJs ktera by mela ten div projit a vykonat prikazy co jsou v elementu <script>. Ale v IE o proste nenajde ty elementy <script>

kdyztak sjem vytvoril ukazku http://drneo.ic.cz/ajax/ajax.html V FF Opere vpohode ale v IE ten odkaz poste nefakci. Kdyztak zdrojaky jsou na http://drneo.ic.cz/ajax. Kdyby se nasla nejaka dobra duse ktera by an to koukla byl bych vdecen. Jsem z toho opravdu zmateny. Nebo treba jen nakopnout jak to upravit
los
Profil *
Keby si si vypísal innerHTML elementu document.getElementById(this.elementID), tak by si videl, že tam žiaden tag script nie je. Internet Explorer text odpovede zo servera pri nastavení do vlastnosti innerHTML rozparsoval a upravil.

Podľa dokumentácie MSDN, keď chceš v innerHTML použiť element script, musí mať vykonávaný skript nastavenú vlastnosť defer na true (potom mi ale prestali fungovať iné veci a nechcelo sa mi zisťovať, že prečo). Náhodou som si všimol, že keď odpoveď zo servera vložíš do elementu body, tak sa aj element script zachová. Takže najjednoduchšia úprava sa mi zdá taká, že pri nastavovaní vlastnosti innerHTML vložíš odpoveď do elementu body. IE bude šťastný a ostatné prehliadače to prekusnú :)

document.getElementById(this.elementID).innerHTML = "<body>" + this.httpRequest.responseText + "</body>";


Toto riešenie je dosť škaredé. Proti používaniu innerHTML nemám veľké výhrady, ale nerozumiem, prečo v ňom musí byť ten script, keď to ide napísať aj bez neho.

V metóde __insertContent objektu DHTML_modalMessage používaš globálnu premennú DHTMLSuite_modalBox_contentDiv. Keďže predtým dynamicky vytváraš div, ktorému nastavíš atribút id na DHTMLSuite_modalBox_contentDiv, vytvorí sa v IE automaticky globálna premenná s takýmto názvom. V metóde __insertContent tejto premennej priradíš nejakú hodnotu, pričom to spadne, takže si tam doplň var.

Zdá sa mi, že tie zdrojáky nemajú hlavu a pätu - pri ďalšom rozširovaní sa podľa mňa v tom už nikto nebude vyznať. Zišlo by sa to trochu učesať...
Dr.Neo
Profil *
los
Diky za tip! konecne aspon vim cim to je. Ach jo to IE zase si dela co chce upravuje si vkladany obsah :-(. Aspon vim kde je chyba a muzu zkusit to nejak obejit. To body je opravdu skarede a taky to neni validni.

jinak na vysvetlenou:
jsem si vypsal obsah toho vkladaneho textu a vsiml jsem si ze tam ten javascript neni ale nevedel sjem proc kdyz v ostatnich prohlizecich byl. A taky jsem si vsiml ze se mazou jen nektere scripty. Jak naznacuju v tom prvnim prikladu tak ten druhy JS se vykona.

na tech strankach je jen ukazka toho meho problemu. Jinak je to cele zaintegrovane do vetsiho systemu kde se pouzivaji sablovy a obsah se vytvari dynamicky takze tam to zpracovani JS potrebuju ale zacinam se smirovat ze to budu muset vymyslet jinak

A co se tyce zdrojaku verim ze v nich muze byt trosku zmatek.Se s JS ucim a tak nektere knihovny stahuju a neco se snazim splacat sam a pak se to mze jevit jako slatanina. Ale na necem se to clovek musi naucit :-)
los
Profil *
Validita s týmto príliš nesúvisí. Môžeš si dynamicky vytvoriť element, ktorý nebude obsahom stránky a do neho vložíš "<body>" + odpoveď + "</body>" a z neho vykonáš všetky elementy script (prípadne chytíš obsah elementov script pomocou regulárneho výrazu priamo z odpovede a žiadnu fintu s body používať nemusíš). Do stránky vložíš iba odpoveď, takže tam žiadne body navyše nebude.
Okrem toho, keď si vypíšeš innerHTML, tak vidíš, že element body sa tam nevloží. Škaredé je to skôr kvôli tomu, že je to neštandardné riešenie, ktorého dôsledkom je, že to neočakávane funguje.

Ten JavaScript v elemente script tam ale byť nemusí. Stačilo by, keby sa v súbore pokus.php volala pri kliknutí na odkaz funkcia, ktorá by tam už bola nahratá pred stiahnutím súboru pokus.php do prehliadača.
peta
Profil *
Dr.Neo
FF - JS konzola - cista (hlasi akorat chybu v CSS nenama vlastnost filter)
IE - JS konzola - po kliknuti hlasi:
radek 10, znak1, "messageObj" neni definovan

Nejcasteji tato chyba nastabva, kdyz volas nejaky objekt pres HEAD a ne jako BODY onload="" nebo (window.body.onload). Jinymi slovy, pokousis se v HEAD pracovat s objektem, ktery jeste nebyl vytvoren, protoze BODY je az za HEAD.
Cili mozna by stacilo celou praci presunout do body nebo body onload.
Nebo, jak radil LOSm resit to vepisovanim do BODY tagu, ten existuje vetsinou vzdy.
Dr.Neo
Profil *
los
Jo spravne ono se to tam nevlozi. Jsem nejdriv napsal odpoved a pak to az zkousel tak ze jsem to nevedel.

Ono funkce je taky vyloucena. Ono se totiz pres ajax budou nahravat ruzne scriptiky ktere budou obsahovat ruzne JS. To bych na hlavni strance musel mit plno funkci na jejich ovladani.

Nakonec jsem to teda resil tim <body> ktere se vklada jen kdyz jde o expoler. A zda se ze to funguj.

Opravil jsem to i na tom ukazkovem webu a necham to tam kdyby nahodou mel nekdo stejny problem.

Jeste jednou moc diky za pomoc! Sam bych na to urcite neprisel.
Dr.Neo
Profil *
peta
Ne tim to nebylo v headru se linkuji jen ty *.js soubory. Zbytek se dela v body(vytvoreni instanci trid a pak jejich volani). Sice s JS zacinam ale s programovanim zkusenosti trosku mam a dokazu si predstavit ze nesmim v HEAD pracovat s objekty ktere vytvarim az v body. Ale presto diky aspon za nejaky napad. Lepsi neco nez nic. Chyba byla opravdu v tom jak to popisoval los. Ze IE odstranuje tagy <script>. Timto mu jeste jednou diky! Protoze mi to opravdu dost pomohlo!
Upak
Profil *
Mám problém s češtinou v ajaxu, vrací mi to otazníky, je to známý problém, ale řešení nikde. Prosím, nenašel by se dobrotivec, který mi ukázal část kódu, kde se čeština řeší???? Sedím nad tím už děsně dlouhou dobu a nic.......................................
Upak
Profil *
Použil jsem tento kód:

http://citron.blueboard.cz/clanek-239-ajax-navod-pro-zacatecniky.html
Upak
Profil *
Tak jo, češtinu už jsem si pořešil, ale!!!

Je problém s Firefoxem!!!

Mozilla funguje. Opera funguje. IE funguje. Na českém netu nemůžu najít nic, vůbec nic k tomuto problému. Na zahraničních webech nacházím pouze dotazy bez odpovědí. Tak buď jsme Češi (krom mě) geniální, nebo si hrajeme na to, že to funguje bez problémů.

Mimochodem s tou češtinou jsem se pěkně zapotil.
Toto téma je uzamčeno. Odpověď nelze zaslat.

0