Check alle échte Black Friday-deals Ook zo moe van nepaanbiedingen? Wij laten alleen échte deals zien

[AJAX] responseText string fout

Pagina: 1
Acties:
  • 275 views sinds 30-01-2008
  • Reageer

  • Highlandd
  • Registratie: November 2005
  • Laatst online: 27-10 13:18
Hallo,
Ik loop vast op een erg simpele script in javascript die een php form uitvoert.
Het probleem hier is dat de returnstring xmlHttp.responseText wel een string terugstuurt maar niet door mijn controle komt.
Als ik een alert(xmlHttp.responseText); doe dan krijg ik netjes de string (leeg of niet leeg) maar als ik die in een IF verwerk dan werkt hij niet. Ik heb zooi scripts ter referentie gebruikt maar vreemd genoeg gebruikt niemand een controle nadat ze de een string terugkrijgen. Het idee erachter is dat ik dus check of een username in een form al gebruikt is, zo niet dan moet de form groen worden, tot nu toe krijg ik nog geen succesvol antwoord dus hoop ik dat hier te kunnen halen.


JavaScript: registerform.js
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
function checkUsername(str)
{
    xmlHttp = GetXmlHttpObject()
    if(xmlHttp == null)
    {
        alert("Browser does not support HTTP Request/Uw browser ondersteunt geen HTTP uitvoeringen.");
        return;
    }
    // getReg.php?u=[String]&sid=[Random number] -> getReg.php?u='user'&sid=0.8     PHP request!
    var url = "getReg.php"
    url = url + "?u=" + str
    url = url + "&sid=" + Math.random()
    
    xmlHttp.onreadystatechange = stateChanged
    xmlHttp.open("POST", url, true)
    xmlHttp.send(null)
}


//99% browsercompatible
function stateChanged(){
    if (xmlHttp.readyState == 4 || xmlHttp.readyState == "complete") 
    {
        if (xmlHttp.responseText != "") {
                document.getElementById("regfield3").style.backgroundColor = "#ffd4d2";
                document.getElementById("box3").innerHTML = xmlHttp.responseText;
                document.username_icon.src = "images/regwrong.png";
                document.getElementById("box3").style.backgroundColor = "#ffd4d2";
                alert("Bezet");
            }
        if (xmlHttp.responseText == "") 
        {
            document.getElementById('regfield3').style.backgroundColor = '#e8fbce';
            document.username_icon.src = "images/reggood.png";
            document.getElementById('box3').innerHTML = "Dit formulier is goed ingevuld!";
            document.getElementById('box3').style.backgroundColor = '#e8fbce';
            alert("Vrij");
        }
    }
}

function GetXmlHttpObject(){
    var xmlHttp = null;
    try {
        // Firefox, Opera 8.0+, Safari
        xmlHttp = new XMLHttpRequest();
    } 
    catch (e) {
        //Internet Explorer
        try {
            xmlHttp = new ActiveXObject("Msxml2.XMLHTTP");
        } 
        catch (e) {
            xmlHttp = new ActiveXObject("Microsoft.XMLHTTP");
        }
    }
    return xmlHttp;
}


PHP: getReg.php
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
<?php

$u=$_GET["u"];

include("sqlconnect.php");

$sql="SELECT username FROM login WHERE username = '".$u."' ";

$result = mysql_query($sql);
$rowCount = mysql_num_rows($result);
if($rowCount != 0)
{
    while($row = mysql_fetch_array($result))
    {
        echo "De gebruikersnaam " . $row['username'] . " is al in gebruik!";
    }
}
else
{
    echo "";
}

mysql_close($DBcon);

?>


Ik hoop hiermee ook gelijk genoeg informatie meegestuurd te hebben zodat anderen er iets mee kunnen, ik word er gek van namelijk 8)7
Line 20-40 van de javascript is de controle functie.

  • pistole
  • Registratie: Juli 2000
  • Laatst online: 16:08

pistole

Frutter

maar als ik die in een IF verwerk dan werkt hij niet
Kan je iets specifieker zijn? Wat werkt er dan niet? Foutmelding?

Ik frut, dus ik epibreer


  • Gomez12
  • Registratie: Maart 2001
  • Laatst online: 17-10-2023
doe eens een alert met een a voor de respons en een a na de respons, ik gok dat je een spatie terugkrijgt...

  • Copyman
  • Registratie: Januari 2001
  • Laatst online: 20-11 20:27

Copyman

Dode muis

Probeer het eens met:
JavaScript:
1
if(!xmlHttp.responseText) { ... }

en:
JavaScript:
1
if(xmlHttp.responseText) { ... }

Zeer belangrijke informatie: Inventaris


  • Highlandd
  • Registratie: November 2005
  • Laatst online: 27-10 13:18
pistole schreef op woensdag 02 januari 2008 @ 22:51:
[...]

Kan je iets specifieker zijn? Wat werkt er dan niet? Foutmelding?
Ik krijg altijd een bezet alert ipv een vrij alert wat er zou moeten komen.
Gomez12 schreef op woensdag 02 januari 2008 @ 22:51:
doe eens een alert met een a voor de respons en een a na de respons, ik gok dat je een spatie terugkrijgt...
Nope ik krijg nog steeds bezet als alert en een lege string dus.
Firebug geeft ook heel netjes een leeg response terug en wanneer ik de url invul krijg ik ook een lege pagina terug (tenzij ik dus een username invul dan responsed ie netjes de username)
Copyman schreef op woensdag 02 januari 2008 @ 22:53:
Probeer het eens met:
JavaScript:
1
if(!xmlHttp.responseText) { ... }

en:
JavaScript:
1
if(xmlHttp.responseText) { ... }
werkt jammergenoeg ook niet, maar ik zie ook niet echt waarom javascript niet luistert.
btw me browser is firefox2, maar in ie7 pakt ie me ook niet, de pagina is bugloos volgens aptana (eclipse freeware clone) en firebug geeft ook geen errors, pagina is volledig xhtml validated etc.

  • Gomez12
  • Registratie: Maart 2001
  • Laatst online: 17-10-2023
Nee, gewoon op regel 23/24 neerknallen : alert('a' & xmlHttp.responseText & 'a')
Als je dat voor de if neerplempt krijg je volgens mij gewoon a a terug ipv aa

  • Juup
  • Registratie: Februari 2000
  • Niet online
Je krijgt bezet omdat die responseText niet identiek gelijk is aan "".
Dus moet je kijken waar hij wel gelijk aan is.
Wat is de
JavaScript:
1
typeof xmlHttp.responseText

?

Een wappie is iemand die gevallen is voor de (jarenlange) Russische desinformatiecampagnes.
Wantrouwen en confirmation bias doen de rest.


  • XWB
  • Registratie: Januari 2002
  • Niet online

XWB

Devver
Whitespace dat meekomt, je string is nooit leeg. Misschien heb je wat aan een trim functie:

JavaScript:
1
2
3
4
5
6
String.prototype.trim = function ()
{
    return this.replace ( /^\s+|\s+$/g, '' );
}

if ( xmlHttp.responseText.trim() != "" )
if (xmlHttp.readyState == 4 || xmlHttp.readyState == "complete")
Deze twee checks zijn sowieso niet nodig, aangezien 4 == complete is. Je kan beter de serverstatus checken.

PHP:
1
if (xmlHttp.readyState == 4 && xmlHttp.status == 200)

March of the Eagles


  • pistole
  • Registratie: Juli 2000
  • Laatst online: 16:08

pistole

Frutter

en (slightly off-topic) wat je eigenlijk zou moeten doen is een XML documentje teruggeven met daarin een status elementje en een tekstueel elementje...

Ik frut, dus ik epibreer


  • Highlandd
  • Registratie: November 2005
  • Laatst online: 27-10 13:18
Juup schreef op woensdag 02 januari 2008 @ 23:02:
Je krijgt bezet omdat die responseText niet identiek gelijk is aan "".
Dus moet je kijken waar hij wel gelijk aan is.
Wat is de
JavaScript:
1
typeof xmlHttp.responseText

?
ik krijg dan als alert message String dat is redelijk logisch aangezien responseText een string is.
Gomez12 schreef op woensdag 02 januari 2008 @ 23:01:
Nee, gewoon op regel 23/24 neerknallen : alert('a' & xmlHttp.responseText & 'a')
Als je dat voor de if neerplempt krijg je volgens mij gewoon a a terug ipv aa
Geeft als response '0' weer (jaja ik verzin het ook niet), maar als ik dat dan "" plaats dan werkt het nog steeds niet (oftewel hij heeft niet door dat hij leeg is)

MAAAR, het werkt nu wel op deze manier
code:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
function stateChanged()
{
    if (xmlHttp.readyState == 4 || xmlHttp.readyState == "complete") 
    {
        if(xmlHttp.responseText == 'leeg')
        {
            alert("Username bestaat nog niet");
        }
        else
        {
            alert( xmlHttp.responseText );
        }
    }
}

wanneer ik in php ook
code:
1
2
3
4
5
6
7
8
9
10
11
if($rowCount != 0)
{
    while($row = mysql_fetch_array($result))
    {
        echo "De gebruikersnaam " . $row['username'] . " is al in gebruik!";
    }
}
else
{
    echo "leeg";
}


Maar alsnog bedankt voor jullie hulp, de eer gaat naar een klasgenoot van me die ook lekker aan het hobby-en was maar blijkbaar ligt het aan de volgorde ofzo want ik snap nog steeds niet waarom het niet werkte.... 8)7 |:(
Pagina: 1