Gå til innhold

[Løst] AJAX problemer


Anbefalte innlegg

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 :whistle: 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å) :blush:

 

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 av Kristure
Lenke til kommentar
Videoannonse
Annonse

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

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

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

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 av Terrasque
Lenke til kommentar

hihi, enda mye igjen å finne ut av :D

 

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

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

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

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 konto

Logg inn

Har du allerede en konto? Logg inn her.

Logg inn nå
  • Hvem er aktive   0 medlemmer

    • Ingen innloggede medlemmer aktive
×
×
  • Opprett ny...