java script: (function(){ if (window.XMLHttpRequest) return; var o = null, s, a = ["MSXML2.XMLHTTP.6.0", "MSXML2.XMLHTTP.3.0", "Msxml2.XMLHTTP", "Microsoft.XMLHTTP"]; for (var i=0,j=a.length; i<j; i++) { s=a[i]; try { if (o=new ActiveXObject(s)) break; } catch(e){}; } window.XMLHttpRequest = o ? function(){return new ActiveXObject(s)} : null; o = null; })();
function SendSporgBrugernavn() { var SendBrugernavn = "ajaxbrugernavn="+document.getElementById('brugernavn').value; askServerBrugernavn(SendBrugernavn); }
function askServerBrugernavn(sQuery) { _oHttp = new XMLHttpRequest(); _oHttp.open("post", "AJAX/Opet-Bruger/brugernavn.php", true); _oHttp.onreadystatechange = function(){ myCallBackBrugernavn(_oHttp) }; _oHttp.send(sQuery); }
function myCallBackBrugernavn(oHttp) { if (oHttp.readyState == 4) { if (oHttp.status == 200) { var svar = oHttp.responseText; alert(svar); } } }
Jeg ved ikke om dette vil løse problemet, men det er altid godt og prøve, og selvom det måske ikke løser det bør du altid inkluderer det når du bruger post metoden.
Det ville være lidt nemmere at finde fejlen hvis du kunne linke til den side hvor din kode bruges(hvis den ligger på nettet, that is).
Jeg kan fortælle dig at der intet er galt med javascript delen. Jeg kan se at informationen bliver sendt rigtigt afsted, så det er php dokumentet der klydre i det et eller andet sted.
Prøv bare at sætte den til echo $_POST['ajaxbrugernavn']; og se hvad der sker.
Intil vidre ser det ud til at virke med: _oHttp = new XMLHttpRequest(); _oHttp.open("post", "AJAX/Opet-Bruger/brugernavn.php", true); _oHttp.setRequestHeader("Content-Type", "application/x-www-form-urlencoded; charset=utf-8"); _oHttp.onreadystatechange = function(){ myCallBackBrugernavn(_oHttp) }; _oHttp.send(sQuery);
Headeren, chrisbuchholz omtaler, er ikke blot 'god skik', men en nødvendighed ved POST-requests - så det er fint, I fik den med.
Desuden bør du altid escape, hvor der kan forekomme specialtegn (f.eks. i et brugernavn):
function SendSporgBrugernavn() { var SendBrugernavn = "ajaxbrugernavn="+encodeURIComponent(document.getElementById('brugernavn').value); askServerBrugernavn(SendBrugernavn); }
Derudover vil jeg gerne se din serverkode, for det må være dér, fejlen ligger =)
Jaja jeg skulle lige forsøge prøve noget først. Desuden er jeg ikke så skab til JavaScript, så jeg skal lige have slået nogle ting op.
function myCallBackBrugernavn(oHttp) { if (oHttp.readyState == 4) { if (oHttp.status == 200) { var Respons = oHttp.responseText; var GetEl = document.getElementById('BrugernavnStatus'); if (GetEl.childNodes.length == 0) { Inset = document.createElement("span");
Ok nu er jeg så langt at jeg gide forklare hvad jeg ikke kan få til at virke.
Ud fra en tilbagemelding som denne "<span style="color:#FF9911;">- Mangler input</span>"
laver jeg 2 varabler via RegExp var FindColor = "color:#FF9911;"; var FindIndhold = "- Mangler input"; Dette virker fint
Herefter vil jeg gerne slette det som er inde i <span id="BrugernavnStatus"> </span> Noget som jeg ikke kan finde ud af.
fx: <span id="BrugernavnStatus"> <span style="color:#FF9911;">- Mangler input</span> </span> Dette er udskrives med PHP!!
Når det er gjort vil jeg gerne oprette et element: fx: <span style="color:#FF0000;">- Fejl</span> Dette gør jeg ud fra variablerne jeg oprettede tidligere
Dette virker lidt, den udskriver tekst men ikke <span> der kommer nemlig ingen farver.
for at udgå at den bliver ved med at oprette et <span> har jeg indsat if (GetEl.childNodes.length == 0)
----------KODE--------------------
function myCallBackBrugernavn(oHttp) { if (oHttp.readyState == 4) { if (oHttp.status == 200) { //-- var Respons = oHttp.responseText; var GetEl = document.getElementById('BrugernavnStatus');
// opretter variabler ud fra fx <span style="color:#FF9911;">- Mangler input</span> var RegExpColor = new RegExp("<span style=\"(..............)\">[^<]+</span>"); var RegExpIndhold = new RegExp("<span style=\"..............\">([^<]+)</span>");
var FindColor = RegExpColor.exec(Respons); var FindIndhold = RegExpIndhold.exec(Respons);
if (GetEl.childNodes.length == 0) { Inset = document.createElement("span");
Hvis der er nogen der vil have et svar er de velkommende til at ligge et, også selvom dette ikke bliver besvaret. Jeg har fået svar på det spørgsmål jeg stille til at starte med. Jeg skriver kun dette ekstra spørgsmål her fordi at OleBole så geren hvil hjælpe mig (tilsyneladende), det er nok fordi at jeg ikke bruger innerHTML :D
OK så fik jeg det til at virke uden innerHTML :D Jeg har bare lige et spørgsmål, i følge dine "Lidt 'langhårede' indianer-tricks" kan man bruge en variabel til at kalde en funktion. Det betyder at jeg skulle kunne gøre sådan..
function askServer(sQuery,sDomain,sOpgave) { _oHttp = new XMLHttpRequest(); _oHttp.open("post", sDomain, true); _oHttp.setRequestHeader("Content-Type", "application/x-www-form-urlencoded; charset=utf-8"); _oHttp.onreadystatechange = function(){ sOpgave(_oHttp) }; _oHttp.send(sQuery); }
function SendSporgBrugernavn() { var SendBrugernavn = "ajaxbrugernavn="+encodeURIComponent(document.getElementById('brugernavn').value); askServer(SendBrugernavn,"AJAX/Opet-Bruger/brugernavn.php","myCallBackBrugernavn") }
function myCallBackBrugernavn(oHttp) { alert(oHttp.readyState); if (oHttp.readyState == 4) { if (oHttp.status == 200) { //-- var Respons = oHttp.responseText; var GetEl = document.getElementById('BrugernavnStatus');
// opretter variabler ud fra fx <span style="color:#FF9911;">- Mangler input</span> var RegExpColor = new RegExp("<span style=\"color:(.......);\">[^<]+</span>"); var RegExpIndhold = new RegExp("<span style=\"color:.......;\">([^<]+)</span>");
var FindColor = RegExpColor.exec(Respons); var FindIndhold = RegExpIndhold.exec(Respons);
---------------forklaring---------- hvis jeg kalder funktionen SendSporgBrugernavn() Skulle den kalde askServer(sQuery,sDomain,sOpgave) hvilket den også gør.
men efter det burde askServer(sQuery,sDomain,sOpgave) kalde myCallBackBrugernavn(oHttp) hvilket den ikke gør.
Det er altså det med at kalde en funktion via en variabel der giver problemer. hvis jeg fx skriver. _oHttp.onreadystatechange = function(){ sOpgave(_oHttp) }; i askServer(sQuery,sDomain,sOpgave) udskriver den nemlig alert("1") TIL alert("4")
hmm ja det er da en start. i myCallBackBrugernavn(oHttp) er oHttp = intet den bliver altså ikke sendt
function askServer(sQuery,sDomain,sOpgave) { _oHttp = new XMLHttpRequest(); _oHttp.open("post", sDomain, true); _oHttp.setRequestHeader("Content-Type", "application/x-www-form-urlencoded; charset=utf-8"); _oHttp.onreadystatechange = function(){ sOpgave(_oHttp) }; _oHttp.send(sQuery); }
function SendSporgBrugernavn() { var Opgave = myCallBackBrugernavn(); var SendBrugernavn = "ajaxbrugernavn="+encodeURIComponent(document.getElementById('brugernavn').value); askServer(SendBrugernavn,"AJAX/Opet-Bruger/brugernavn.php",Opgave) }
function myCallBackBrugernavn(oHttp) { alert(oHttp.readyState); if (oHttp.readyState == 4) { if (oHttp.status == 200) { //-- var Respons = oHttp.responseText; var GetEl = document.getElementById('BrugernavnStatus');
// opretter variabler ud fra fx <span style="color:#FF9911;">- Mangler input</span> var RegExpColor = new RegExp("<span style=\"color:(.......);\">[^<]+</span>"); var RegExpIndhold = new RegExp("<span style=\"color:.......;\">([^<]+)</span>");
var FindColor = RegExpColor.exec(Respons); var FindIndhold = RegExpIndhold.exec(Respons);
Når du skriver: var Opgave = myCallBackBrugernavn();
- indeholder variablen Opgave resultatet af et kald til funktionen myCallBackBrugernavn. Returnerer funktionen strengen Blabla, vil Opgave indeholde denne streng.
Skriver du derimod: var Opgave = myCallBackBrugernavn;
- indeholder Opgave en reference til funktionen. Det betyder, du på et senere tidspunkt kan kalde funktionen med Opgave() - og få returneret, hvad funktionen måtte returnere i dette splitsekund.
tjaa hvis jeg vidste præcis hvad man skal fortage sig for at få det til at virke vil mit problem ikke være så stor. Men jeg er ved at teste JavaScripet men jeg har efter 1½ stadig ikke fundet noget :( Men du er da velkommen til at se i kildekoden.
Du kan skrive noget i brugernavn og trykke tab - for at provokere den til en rød farve kan du fx skrive # i troppen af kildekoden finder du link til JavaScript'ene. Ellers kommer jeg med nogle links når jeg kommer i nærheden af en computer.
Jeg får en 'Permission denied' fejl. Hvorfor har vi ikke hørt om den før? ;o)
Det kunne tyde på, du prøver at lave noget X-Domain Ajax - og det kan man ikke. Filen, der kaldes med XMLHttpRequest objektet, skal ligge under samme domæne, som filen der kalder. Da din side ligger under et subdomæne, er det formodentlig dér, fejlen opstår.
Guide til at blive tosset: - Gå ind på denne side via IE (Jeg har testet med IE7): http://www.kogebogen.a-mweb.dk/NyHTML/index.php?profil=opret - Skriv noget i feltet "brugernavn", fjern fokus (fx tab). - Lig mærke til at der kommer en fejl (ligesom på ekspterten.dk) - Genindlæs side, ikke ved at skrive URL igen men, ved at trykke på F5 knappen. - Skriv noget i feltet "brugernavn", fjern fokus (fx tab). - Lig mærke til at det nu virker.
Mit problem: Mit problem er at fejlen kun opstår i IE når man skriver URL eller går ind på siden. Ligeså snart at man genindlæser (F5) siden virker det perfekt.
Og en at php filerne: brugernavn.php <?php if ($_POST['ajaxbrugernavn'] == "Brugernavn") { echo '<span style="color:#FF9911;">- Mangler input</span>'; } elseif ($_POST['ajaxbrugernavn'] == "") { echo '<span style="color:#FF9911;">- Mangler input</span>'; } elseif (preg_match("/\s+/", $_POST['ajaxbrugernavn'])) { echo '<span style="color:#FF0000;"> - Du må ikke bruge mellemrum! </span>'; } elseif (preg_match("/-+/", $_POST['ajaxbrugernavn'])) { echo '<span style="color:#FF0000;"> - Du må ikke bruge bindestreg! </span>'; } elseif (preg_match("/\w+/", $_POST['ajaxbrugernavn'])) { $anti_sql_infiktion_input = $_POST['ajaxbrugernavn']; include "/home/amwebdk/public_html/Portal/WWW_Kogebogen/MySQL/Anti-SQL-infiktion/A-SQL-i.php"; //Anti-SQL-infiktion $tjek = $anti_sql_infiktion_output;
include "/home/amwebdk/public_html/mappe/opret-forbindelse.php"; //opretter forbindelse $query = "SELECT * FROM `kogebogen-bruger` WHERE brugernavn='".$tjek."'"; $result = mysql_query("$query") OR DIE(mysql_error()); $num_rows = mysql_num_rows($result); //$num_rows = antal rækker i MySQL database
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.