Kjapp og trygg hosting for Wordpress

Ajax/Javascript/php hjelp

Rajohan

Medlem
Hei jeg driver nå å lager en registerings kode til en fremtidig side men, har litt problemer. For meg virker det som det er noe feil i function setOutput(){ (funksjonen ligger lengere ned på siden) da den alltid går vidre til else delen av funksjonen. Har sjekket hva httpObject.responseText er ved både opptatt brukernavn og ledig brukernavn å får riktig resultater lagret, altså den er tom ved opptatt brukernavn og er satt til username_free ved ledig bruker navn. Men uansett om den er satt til username_free vil den ikke kjøre if(httpObject.responseText == "username_free") { men går alltid rett til else delen av koden.

Har lagt ved noen utklipp fra koden som jeg mener kan være relevant for å hjelpe meg med problemet.

Lite utklipp fra PHP delen av koden

PHP:
function username_check() {
   $result = mysql_query("SELECT * FROM users WHERE username='".filter($_GET['inputText'])."' LIMIT 1");
   $num_rows = mysql_num_rows($result);
   if($num_rows == 0) {
      echo "username_free";
   }
}



Lite utklipp fra Javascript/Ajax delen av koden

Kode:
function setOutput(){
   if(httpObject.readyState == 4) {
      if (use_function == "username_check") {
         if(httpObject.responseText == "username_free") {
            username_status.className = 'checked';
            username_status_message.innerHTML = '';
         }
         else {
            username_status.className = 'unchecked';
            username_status_message.innerHTML = 'Brukernavn opptatt';
				
         }
      }
   }
}



Lite utklipp fra Javascript/Ajax delen av koden

Kode:
else {
   if(!stop_ajax) {
      use_function = "username_check";
      text_search = elm.value;
      doWork();
      stop_ajax = 1;
   }
}



Lite utklipp fra Javascript/Ajax delen av koden

Kode:
function doWork(){
   httpObject = getHTTPObject();
   if (httpObject != null) {
      httpObject.open("GET", "ajax.php?inputText="+text_search+"&function="+use_function, true);
      httpObject.onreadystatechange = setOutput;
      httpObject.send(null);
   }
}



Lite utklipp fra HTML delen av koden

Kode:
<input type="text" name="username_post" id="username" onfocus="validate(this);" onblur="clearInput();" /><span id="username_status" class="unchecked"></span><span id="username_status_message" class="status_message"></span>
 

Rajohan

Medlem
Hehe jeg er ikke veldig stabil på javascript, men kan litt. Dette var eneste måten jeg klarte og trodde skulle fungere. Har ikke lyst til å bruke ting som jQuery vil lage alt i fra bunn selv.

Antall rader sjekker jeg jo i php delen som jeg har lagt ved øverst hor jeg sjekker om den er null 0 og om den er det slenger ut "username_free" som blir brukt av getHTTPObject()
 

typisk

Utvikler
Tror du returnerer "username_free " (med mellomrom en eller annen plass);

Prøv å kjør en die; etter echoen, slik:
PHP:
{
 echo "username_free"; 
 die;
}

Prøv også dette, så ser du at det ikke er whitespaces:
Kode:
alert("__" + httpObject.responseText + "__");
 
Sist redigert:

Rajohan

Medlem
Prøvde nåde med die; og tall istede for username_free nå, men det hjelper ikke. Når jeg prøver å skrive ut httpObject.responseText får jeg ut username_free så skjønner ikke helt hvorfor den går rett til else da.
 

Rajohan

Medlem
Ser nå med alert at den gir meg

__
username_free__

så det er altså ett linjeskift der. Hvordan får jeg bort det?

ser ut som det kun er vel alert da, når jeg skriver det ut istede for "brukernavn opptatt" får jeg __ username_free__ så er nok en whitespace der.
 
Sist redigert:

adeneo

Medlem
Nyere nettlesere har støtte for javascript's trim(), som betyr at du kan gjøre:

Kode:
if(httpObject.responseText.trim() == "username_free") {
---
}

IE8 og eldre må patches, noe slikt burde virke:


Kode:
if (!String.prototype.trim) {
   String.prototype.trim=function(){return this.replace(/(?:(?:^|\n)\s+|\s+(?:$|\n))/g,'').replace(/\s+/g,' ');}
}

det beste ville selvfølgelig vært å fikse PHP filen din, og du har sannsynligvis linjeskift og/eller mellomrom før og etter PHP start og stopp, altså <?php og ?>, eller et annet sted hvor det blir skrevet ut.

Pass på at det ikke er noen tegn før og etter PHP start/stopp, og pass på at filen er lagret i riktig tegnsett osv.

Forøvrig anbefaler jeg også å bruke jQuery, da det er mye enklere i forhold til ajax og DOM manipulering, og alle bruker dette i dag, selv Goggle og Microsoft bruker jQuery på sine sider!
 
Sist redigert:

Rajohan

Medlem
Takk for hjelp.

La til kode snutten under å da fungerte alt :)

Kode:
var check_text = httpObject.responseText.replace(/(?:(?:^|\n)\s+|\s+(?:$|\n))/g,'');
 
Topp