Medlem-233777 Skrevet 14. mars 2011 Del Skrevet 14. mars 2011 (endret) Hei, Jeg holder på med et lite prosjekt. Gidder ikke å gå inn i detaljer på prosjektet, men jeg har iallefall problemer med å bruke AJAX 2 plasser på siden min. Den opprinnelige fungerer helt fint, men den neste fungerer ikke uansett om jeg plasserer den over nr. 1 i grunnkoden eller ikke. Jeg kan ha gjort noe feil i selve AJAX delen, men forstår iallefall ikke hva i all verden det er som er galt. Jeg legger ved grunnkoden til selve filen, CSS filen og PHP filene jeg viser til ved AJAX metoden. Det jeg sliter med ligger under login funksjonen i index filen(fet skrift). index(.php) <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Frameset//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-frameset.dtd"> <html xmlns="http://www.w3.org/1999/xhtml"> <head> <meta http-equiv="Content-Type" content="text/html; charset=utf-8" /> <title>Nettleser spill</title> <link href="css/index.css" rel="stylesheet" type="text/css" /> <script type="text/javascript"> function login(){ var xmlhttp; if (window.XMLHttpRequest){// code for IE7+, Firefox, Chrome, Opera, Safari xmlhttp=new XMLHttpRequest(); } else{// code for IE6, IE5 xmlhttp=new ActiveXObject("Microsoft.XMLHTTP"); } xmlhttp.onreadystatechange=function(){ if (xmlhttp.readyState==4 && xmlhttp.status==200){ document.getElementById("worlds_list").innerHTML=xmlhttp.responseText; } } function getvalueslogin(){ username_login = document.getElementById('username').value; password_login = document.getElementById('password').value; login_str = "?username_login="+username_login+"&password_login="+password_login; } getvalueslogin(); try{ alert(login_str); xmlhttp.open("GET","login.php"+login_str,true); xmlhttp.send(); } catch(err){ alert(err.description); } } function worldsshow() { document.getElementById('overlay').style.display = ''; document.getElementById('world_container').style.display = ''; } </script> </head> <body> <input name="Button" type="button" value="Logg inn" onclick="login()" /> </body> </html> Login(.php, hvor problemet ligger. Filen blir aldri lastet.) <?php require("includes/database.php"); $user = $_GET['username']; $password = sha1($_GET['password']); $password_repeat = sha1($_GET['password_repeat']); $email = $_GET['email']; if($user&&$password&&$password_repeat&&$email) { if($password==$password_repeat) { $con = connect("browsergame"); $user_clean = strtolower($user); $exists = mysql_query("SELECT * FROM players WHERE username_clean='$user_clean'"); $numrows = mysql_num_rows($exists); if($numrows==0){ mysql_query("INSERT INTO players (id,username,username_clean,password,email) VALUES ('','$user','$user_clean','$password','$email')"); mysql_close($con); echo "User registered."; } else echo "Username already exists!"; } else echo "Your passwords doesn't match!"; } else echo "All fields required!"; ?> Jeg antar feilen ligger i login() funksjonen i index.php eller(lite sannsynelig) i login.php en plass. Om dere har vært litt snille og flinke idag så har dere kanskje lagt merke til at det mangler en fil her. Filen database.php inneholder bare en funksjon hvor du kobler deg til mysql databasen og vil ikke være nødvendig her(noe css filen ganske sikkert ikke er også) Jeg har forresten også prøvd å legge inn dette helt på toppen av login.php filen bare for å se om filen blir lastet i det hele tatt(noe den ikke gjør). echo = "test"; Jeg har også plassert alert("test"); ved xmlhttp.send i login() funksjonen for å se om funksjonen muligens blir stoppet halvveis. Det gjør den ikke. Håper dette er en simpel feil som dere utifra den informasjonen jeg har gitt dere kan finne. Og for et tips til dere som ikke gidder å sette dere så altfor godt inn i dette: Ta en titt på createUser() funksjonen og login() funksjonen i index filen. Jeg trudde først selv at det kunne ha noe med at begge funksjonene bruker samme variabel(noe som jeg fortsatt ikke har avkreftet helt), men nå har jeg prøvd å endre variablene til å være lokale(trur jeg). Takker på forhånd for all hjelp da jeg føler meg ganske stucked. Endret 15. mars 2011 av Kristure Lenke til kommentar
MikkelRev Skrevet 14. mars 2011 Del Skrevet 14. mars 2011 Prøv å eliminer vekk kode som ikke er relevant for problemmet. Det gjør det mye enklere å debugge, både for deg og for andre. Lenke til kommentar
Medlem-233777 Skrevet 14. mars 2011 Forfatter Del Skrevet 14. mars 2011 Prøv å eliminer vekk kode som ikke er relevant for problemmet. Det gjør det mye enklere å debugge, både for deg og for andre. Ved å bruke comments da eller? Lenke til kommentar
Terrasque Skrevet 14. mars 2011 Del Skrevet 14. mars 2011 Hmm.. du sender passord via GET? Huff og huff, for en dårlig praksis Uansett, fjern irrelevant kode fra eksemplet. Ha minimum kode som trengs for å reprodusere problemet. Lenke til kommentar
Medlem-233777 Skrevet 15. mars 2011 Forfatter Del Skrevet 15. mars 2011 (endret) Nå ligger bare grunnkoden som er relevant til problemet i førstepost. Vil også informere at jeg også har en funksjon til som er tilnærmet likt identisk med login(); Endret 15. mars 2011 av Kristure Lenke til kommentar
emilkje Skrevet 15. mars 2011 Del Skrevet 15. mars 2011 Her ligger problemet i hvordan koden og funksjonene er organisert. Jeg har prøvd å rydde opp litt, men har ikke fått testet det. function login(){ var xmlhttp = initAJAX(); xmlhttp.onreadystatechange=function(){ if (xmlhttp.readyState==4 && xmlhttp.status==200){ document.getElementById("worlds_list").innerHTML=xmlhttp.responseText; } var login_str = getvalueslogin(); try{ alert(login_str); xmlhttp.open("GET","login.php"+login_str,true); xmlhttp.send(); } catch(err){ alert(err.description); } } function initAJAX() { if (window.XMLHttpRequest){// code for IE7+, Firefox, Chrome, Opera, Safari return new XMLHttpRequest(); } else{// code for IE6, IE5 return new ActiveXObject("Microsoft.XMLHTTP"); } } function getvalueslogin(){ username_login = document.getElementById('username').value; password_login = document.getElementById('password').value; return "?username_login="+username_login+"&password_login="+password_login; } function worldsshow() { document.getElementById('overlay').style.display = ''; document.getElementById('world_container').style.display = ''; } Mitt tips vil uansett være å ikke bruke selvmekka ajax-kall i produksjonssammenheng. Bruk et kvalitetssikret rammeverk som for eksempel jQuery som gjør dette enkelt og cross-platform. Hvis dette da ikke er for å lære hva som foregår i bakgrunnen da selvsagt da må du bare leke i vei Lenke til kommentar
emilkje Skrevet 15. mars 2011 Del Skrevet 15. mars 2011 (endret) * Fjernet dobbeltpost * Endret 15. mars 2011 av emilkje Lenke til kommentar
Terrasque Skrevet 15. mars 2011 Del Skrevet 15. mars 2011 Nå kan det hende jeg har blitt blind på begge øynorna på mine gamle dager, men jeg kan bare finne login() index.php, og ikke createUser().. Uansett, kan ikke se noe direkte galt med login funksjonen. Et lite tips for å gjøre JS litt enklere å jobbe med : jQuery. .load() og .serialize() virker midt i blinken for det du forsøker. $("#div_id").load("login.php", $("#form_id").serialize()); Lenke til kommentar
Medlem-233777 Skrevet 15. mars 2011 Forfatter Del Skrevet 15. mars 2011 Stemmer det at jeg gjør dette litt for å lære meg javascript og lignende. Til deg som ikke finner createUser() funksjonen så fjernet jeg dette da noen andre ba meg fjerne overflødig koding som ikke er relevant med problemet. Trur allikevel jeg går over til å bruke jQuery. Uansett så takker jeg så mye for all hjelp. Lenke til kommentar
Terrasque Skrevet 15. mars 2011 Del Skrevet 15. mars 2011 (endret) Det er spesielt greit å bruke et JS toolkit som jQuery eller Dojo når du skal poke bort i DOM / browser ting. Det er ofte ganske kronglete, en del gotcha's ute og går, og i tillegg så er det (noen ganger ganske store) forskjeller fra browser til browser. Da kan du konsentrere deg om det du vil at koden skal gjøre, og la DOM detaljene / det kjedsommelige arbeidet bli tatt av et lib, som er grundig testet over de aller fleste browserne. Ingen grunn til å mekke hjulet på nytt hele tiden En ting jeg oppdaget, etter å ha fått vekk alt tullet med jQuery, var at JS er faktisk et ganske elegant språk, og behagelig å jobbe med. Tornene pleier som sagt å være i det browser spesifikke. Edit : Firebug (firefox addon), Opera's Dragonfly, IE's dev tools, eller Chrome Inspect.. Er absolutt en must Gjør ting mye enklere å debugge, og jobbe med. Endret 15. mars 2011 av Terrasque Lenke til kommentar
emilkje Skrevet 15. mars 2011 Del Skrevet 15. mars 2011 Et lite tips for å gjøre JS litt enklere å jobbe med : jQuery. .load() og .serialize() virker midt i blinken for det du forsøker. $("#div_id").load("login.php", $("#form_id").serialize()); Off-Topic: Ikke gi bort all informasjonen For å lære å hjelpe seg selv, kan man ikke få alt servert Lenke til kommentar
Terrasque Skrevet 15. mars 2011 Del Skrevet 15. mars 2011 hihi, enda mye igjen å finne ut av Den linjen var mer en "Her er hvorfor du bør bruke jQuery" ting. "Her kan du erstatte omtrent all koden du skrev med en linje, som du kan være ganske sikker på at gjør det riktige" Neste steg er vel JSON svar, som skal parses på klient siden? Lenke til kommentar
Medlem-233777 Skrevet 15. mars 2011 Forfatter Del Skrevet 15. mars 2011 Jeg har erfaring med jQuery fra tidligere Men jeg har vært virkelig dårlig på javascript tidligere og jeg følte at dette var en fin måte å øve seg litt på. Men ser nå at dette er litt for komplisert for meg, og jeg kan finne en annen metode enn ved AJAX å lære meg Javascript på. Lenke til kommentar
Terrasque Skrevet 15. mars 2011 Del Skrevet 15. mars 2011 God ide uansett. Som sagt, slike ting kan være knotete og variere fra browser til browser, og har egentlig ingenting med JS som språk å gjøre. http://www.w3schools.com/js/default.asp har ganske grei fokus på JS, men det er litt browser ting innimellom der (som events og popup boxes - jQuery er excellent på events, men popup bokser må du evt fikse selv, så den kan være grei å skumme igjennom). Lenke til kommentar
Anbefalte innlegg
Opprett en konto eller logg inn for å kommentere
Du må være et medlem for å kunne skrive en kommentar
Opprett konto
Det er enkelt å melde seg inn for å starte en ny konto!
Start en kontoLogg inn
Har du allerede en konto? Logg inn her.
Logg inn nå