Sider og er igang med at lave et lille site, og ville nu prøve kræfter med noget ajax.
Siden er bygget med php og prototype.
mit problem ligger i at jeg starter med at loade min index.php hvor der endlig ikke sker det vilde, sidens design laves, en session oprettes i php, prototype loades til klienten og i en div til indhold loades en login form.
så lang så godt, når brugeren så skriver et eller andet og sender via post dette til login siden som jeg kalder via prototype, hentes denne nye side godt nok ind i den div jeg har valgt, MEN det nye javascript kode jeg har i den vil ikke køre, jeg skal hvis bruge noget eval function, men jeg kan stadig ikke få den til at køre de functioner som jeg allerede har loaded via index.php som klienten stadig er på.
bare skriv et eller andet i login, du vil så via ajax se at der kommer en ny side, denne indeholder noget java til at bruge en funktion jeg allerede har loaded, men det vil ikke virke inde i denne side men virker fint hvis det er i en side jeg ikke loader via ajax.
Her er det kode der køres på den side man kommer til efter login: echo "Thank you for your comments, ".$_POST['bruger']; echo "<script language=\"javascript\" type=\"text/javascript\"> $('menu').show(); </script>"; det er java scriptet der melder en fejl, ala man ikke kan bruge $().show(); funktionen da den ikke er loaded med denne siden men med parrent siden eller hvordan man nu skal sige.
det denne skulle gøre er at ændre display til show på en div som er i index.php siden fra starten af som bare at skjult.
AJAX er det vanskeligste, du overhovedet kan kode til en browser. For at skrive AJAX skal man være _absolut_ JavaScript-haj - for ikke at tale om HTML- og DOM-haj. Naturligvis kan man (øjensynligt) komme lidt lettere over det ved at bruge et library som Prototype - men det kræver jo, at koderne bag det pågældende lib er kompetente. Prototype-library'et er desværre fyldt med invalid og dårlig kode, så det hjælper med andre ord ikke så meget.
Nu ved jeg ikke, hvad det er, du prøver at bruge AJAX til, men jeg frygter, det er til alm. indhold. Det bruger man _aldrig_ AJAX til. Dels kan brugeren ikke bookmarke siden - dels kan søgemaskinerne ikke læse dit indhold, hvorfor sitet bliver ignoreret.
Well det er til blandet indhold, både normalt indhold og til mindere apps.
Har ikke brugfor google kommer forbi dette site, forsiden er en login box ikke andet så den kan få lov at indexe denne og intet mere :D
mere kort forklaret....
Page a divs: menu og indhold
div menu er skjult loader indhold i div indhold, (en form) folk logger ind og bliver valideret hvis alt går vel retuneres der en ny side med et lille script som bla. sætter style.display = show; på div menu, men det vil den ikke. her lige lavet en mindere test uden om prototype og her har jeg samme problem.
i page b vil ikke ændre noget i page a document.getElementById('menu').display.show;
den siger object requiret. mener nu nok jeg har givet den det den skal have...
Java hej eller ej, har klaret mig ok uden .hej i en del år både i pascal, c, asm, php m.m. så noget så simpelt som lidt ajax burde ikke få mig i knæ ;) men er dog faldet over denne som ikke ligner et ajax problem aligevel, men snare noget javascript lala ala den er i et forkert namespace eller noget. any ideas?
mht. med prototype ikke er så godt, kan du give et par hint til hvad der er af problemer og evt. andet lib jeg kunne bruge, eller måske om det er bedre selv at lave et minimalt et til sitet.
"så noget så simpelt som lidt ajax burde ikke få mig i knæ" >> Det er en dramatisk misforståelse, som formodentlig er årsagen til, så mange skriver AJAX-libs og -applikationer uden de fornødne forudsætninger.
AJAX er som sagt noget af det mest komplekse, du overhovedet kan kode til en browser. Dels kræver det ekstremt godt DOM- og JS-kendskab - og dels kræver det _meget_ stor indsigt i bl.a. IE's garbage-collection (eller mangel på samme).
Det er ikke småting i Prototype, der galt - så en 'reparation' er ikke hensigtsmæssig. Jeg kan heller ikke anbefale andre AJAX-libs. Faktisk er Google nogle af de _yderst_ få på nettet, der leverer AJAX-applikationer i acceptabel kode. Alle andre, jeg har set forsøge, skriver hamrende invalid kode og/eller brænder bunker af hukommelse af på hvert AJAX-kald i IE ... hukommelse, der ikke bliver frigivet - ofte ikke engang ved sideskift (Tjek din TaskManager, mens du foretager handlinger i en AJAX-app).
Skal du selv skrive et AJAX-lib, skal du som sagt være _absolut_ JS- og DOM-monster ... så det er nok heller ikke løsningen :o|
Har droppet lib iden, og lavet et par functioner selv som er i stand til at loade inhold til divs via get og post, så langt så godt.
men jeg har stadig problemet med at jeg ikke kan ændre i divs jeg ikke har fra den siden jeg loader ind i indholds div, kender du til javascript og scope global, local ? er det sådan noget som går galt? for mig virker det til at det skulle ligge til højre benet af browseren, alt er jo på samme side så render da den forpulede div med den stump kode du har fået serveret :D
Jeg kender intet til din kode, så jeg har ikke kinamands chance for at sige, hvad du gør galt ... men da der er tale om AJAX, gør du sikkert ikke meget rigtigt. Der er bunker af faldgruber i AJAX =)
Umiddelbart lyder det, somom du begår den klassiske fejl - at bruge innerHTML. Det er en invalid property, som af mange grunde er noget rod at bruge - og som forøvrigt er komplet bandlyst i XHTML.
Når man skriver AJAX, sendes data retur til klienten i XML- eller JSON-format ... men _aldrig_ i HTML-format! På klienten oprettes derefter HTML-elementer med DOM. Disse fyldes med data fra query-respons'en og indsættes i siden med DOM.
Skal der sættes event-handlers på de indsatte elementer, er der til gengæld frit valg på samtlige hylder, når det gælder fejlmuligheder - eller rettere muligheder for at ende op med rigtig dårlig og skidt performende kode.
Anyway ... skal du have hjælp til at finde fejl i din kode, må vi vide, hvad du gør =)
Synes godt om
Ny brugerNybegynder
Din løsning...
Tilladte BB-code-tags: [b]fed[/b] [i]kursiv[/i] [u]understreget[/u] Web- og emailadresser omdannes automatisk til links. Der sættes "nofollow" på alle links.