Problemen met ajax innerhtml functie

Pagina: 1
Acties:

Onderwerpen


Verwijderd

Topicstarter
Ik ben een vrij onervaren programmeur, dus de oplossing kan voor de hand liggen.

Ik ben bezig met een private message system adhv ajax.
Deze code zoekt naar de contactpersoon. Het is een zoekbar met voorspellende contacten (zoals google), en heeft als doel de geselecteerde terug te brengen naar mijn searchusers.php. Of dat lukt test ik via de alert(contact) functie.

Dit is mijn searchusers.php
HTML:
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
<html>
    <head>
        <script type="text/javascript" >
    
            function setreceiver(contact){
                alert(contact);
    
                }

            function search()
            {
                if(window.XMLHttpRequest) {
                        xmlhttp= new XMLHttpRequest();
                    } else { 
                                xmlhttp= new ActiveXObject ('Microsoft.XMLHTTP');
                            }
                            xmlhttp.onreadystatechange = function() {
                                if(xmlhttp.readyState ==4 && xmlhttp.status == 200) {
                                    document.getElementById('result').innerHTML = xmlhttp.responseText;
                                }
                            }
                xmlhttp.open('GET', 'su2.php?searchtext='+document.getElementById('searchtext').value, true);
                xmlhttp.send();
            }
        
    </script>
    </head>
    
    <body>
    <input type="text" name="searchtext" id="searchtext" onkeyup="search();">

    <div id="result" >
    </div>
    </body>
</html>


dit is su2.php
code:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
<?php

include ('connect.php');
if(isset($_GET['searchtext']) && $_GET['searchtext']!=""){
    $searchtext= $_GET['searchtext'];
    //echo $searchtext;
    $result=mysql_query(" SELECT username FROM users WHERE username REGEXP '$searchtext' ");
    while($row=mysql_fetch_assoc($result)){
    $name=$row['username'];
    $test='test';
    echo "<p onclick='setreceiver(".$name.");'>".$name."<br />";
    }
}
?>


Het probleem zit volgend mijj hier in deze laatste, want als ik het agrument van de functie setreceiver verander in een int (vb 5). lukt het wel. Met een string echter weer niet, wat zou kunnen wijzen op een fout in men aanhalingstekens.
Hopelijk kent iemand een oplossing, alvast bedankt.
:)

  • Matis
  • Registratie: Januari 2007
  • Laatst online: 11-09 20:27

Matis

Rubber Rocket

Installeer (of gebruik) een goede webdebuggger (firebug voor Firefox of de geintegreerde webdeveloper tools in IE of Chrome) en kijk eens welke asynchrone requests er voorbij komen.
Probeer daarnaast eens in de browser naar su2.php?searchtext=kareltje te gaan en kijk eens wat er dan op je scherm komt?

If money talks then I'm a mime
If time is money then I'm out of time


  • Feanathiel
  • Registratie: Juni 2007
  • Niet online

Feanathiel

Cup<Coffee>

Je mist inderdaad nog wat aanhalingstekens op regel 11 van je su2.php. Echter zou dat de error console (of vergelijkbaar in andere browsers) je wel op moeten aanspreken. Kijk eens wat de uitvoer van die regel code in html/js representeert, en kijk of dat je dit wel op deze manier wilt.

Let ook even op je sql injection op regel 7 van su2.php.

  • StevenK
  • Registratie: Februari 2001
  • Laatst online: 11-09 21:16
In Javascript zullen er ook nog enkele quotes om die $name moeten staan:
PHP:
1
echo "<p onclick='setreceiver('".$name."');'>".$name."<br />";

Was advocaat maar vindt het juridische nog steeds leuk


  • Matis
  • Registratie: Januari 2007
  • Laatst online: 11-09 20:27

Matis

Rubber Rocket

Kijk ook eens naar de scoping van variabele xmlhttp Volgen mij is die niet meer zichtbaar in de rest van de functie.

If money talks then I'm a mime
If time is money then I'm out of time


Verwijderd

Topicstarter
dus moet ik de ajax funcite opnieuw schrijven, in de omgekeerde richting?
Matis schreef op zaterdag 29 september 2012 @ 14:31:
Kijk ook eens naar de scoping van variabele xmlhttp Volgen mij is die niet meer zichtbaar in de rest van de functie.

  • Barryvdh
  • Registratie: Juni 2003
  • Laatst online: 14:10
Je zou ook eens kunnen kijken naar jQuery, als je het jezelf makkelijk wil maken.

Acties:
  • 0 Henk 'm!

  • Alex)
  • Registratie: Juni 2003
  • Laatst online: 21-08 11:20
Je zit hier inderdaad met een scoping-issue. De variabele xmlhttp definieer je in de functie search, maar wanneer het onreadystatechanged-event wordt afgevuurd zit je niet meer in dezelfde functie. Doordat AJAX asynchroon werkt wordt de code in de onreadystatechanged-eventhandler niet in dezelfde context uitgevoerd.

De oplossing hiervoor is simpel: voeg boven de declaratie van de functie search het volgende toe:
JavaScript:
1
var xmlhttp = null;


jQuery gebruiken is een mogelijkheid, maar wellicht is dat overdreven om één actie asynchroon uit te voeren als je verder nergens jQuery voor gebruikt.

We are shaping the future

Pagina: 1