Zu den Aufzeichnungen der tutorials.de-Live-Workshops
ERLEDIGT
JA
ANTWORTEN
9
ZUGRIFFE
502
EMPFEHLEN
  • An Twitter übertragen
  • An Facebook übertragen
AUF DIESES THEMA
ANTWORTEN
  1. #1
    Registriert seit
    Jun 2008
    Ort
    Nah bei Köln
    Beiträge
    252
    Hallo zusammen,

    meine ersten Anfänge in Ajax, also bidde nicht beschweren. Habe versucht eine AutoSuggest-Box umzufriemeln, um wie z.B. bei Youtube bei klick auf ein Listenelement die URL direkt aufzurufen. Mein Problem ist folgendes: Die Funktion "fill(string)" wird aufgerufen, der erste Befehl "$('#country').val(thisValue);" auch korrekt ausgeführt. Enthaltener Wert (z.B. "Shrek 2") wird auch in die Textbox (id: country) übertragen. Nur bei der Übergabe von thisValue an die redirect.php hapert es ein bisschen. Es wird nur "undefined" übergeben, obwohl thisValue ja eigentlich "Shrek 2" enthält. Wo ist mein Problem?

    Danke im Voraus!

    Code :
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    
    function fill(thisValue) {
          
            $('#country').val(thisValue);       
            
            $.post("redirect.php", {queryString: ""+thisValue+""}, function(data){
                    if(data.length >0) {
                        window.location.href= data;                 
                    }
                });
            setTimeout("$('#suggestions').fadeOut();", 300);
        }
     

  2. #2
    Avatar von Sven Mintel
    Sven Mintel Sven Mintel ist offline Mitglied
    Registriert seit
    Aug 2003
    Beiträge
    18.238
    Blog-Einträge
    6
    Moin,

    dein Code enthält für sich keinen Fehler, die Funktion sendet bei mir den korrekten Wert.
    Poste mal bitte mehr, z.B. den Part, aus dem hervorgeht, wo/wie die Funktion fill() aufgerufen wird.
     

  3. #3
    Registriert seit
    Jun 2008
    Ort
    Nah bei Köln
    Beiträge
    252
    Hey Sven,

    danke für die Antwort. Bestätigt immerhin, dass ich nicht ganz deppert bin
    Der Code steht in einer PHP, die die AutoSuggest-Box generiert. Hier der Schnipsel:

    Code :
    1
    2
    3
    4
    
    foreach($names as $name)
    {
       echo '<li onClick="fill(\''.htmlentities(addslashes($name)).'\');">'.htmlentities($name).'</li>';
    }

    Im Klartext:

    HTML-Code:
    <li onClick="fill('Shrek 2');">Shrek 2</li>
     

  4. #4
    Avatar von Sven Mintel
    Sven Mintel Sven Mintel ist offline Mitglied
    Registriert seit
    Aug 2003
    Beiträge
    18.238
    Blog-Einträge
    6
    Hmm, auch das funktioniert problemlos bei mir.

    Bist du sicher, dass du in der redirect.php die korrekte Variable abfragst-> $_POST['queryString']
     

  5. #5
    Registriert seit
    Jun 2008
    Ort
    Nah bei Köln
    Beiträge
    252
    Muss ja eigentlich. PHP würde niemals "undefined" in Variablen schreiben, wenn sie leer ist. Das kuriose ist ja, dass er den Text in dasTExtfeld setzt, aber danach urplötzlich "thisValue" "undefined" ist.
     

  6. #6
    Avatar von Sven Mintel
    Sven Mintel Sven Mintel ist offline Mitglied
    Registriert seit
    Aug 2003
    Beiträge
    18.238
    Blog-Einträge
    6
    Mmmh,

    ich bekomme diesen Fehler nicht reproduziert

    Besteht die Möglichkeit, eine Demo dessen online zu Stellen?
     

  7. #7
    Registriert seit
    Jun 2008
    Ort
    Nah bei Köln
    Beiträge
    252
    Geht Per PN raus!
     

  8. #8
    Registriert seit
    Jun 2008
    Ort
    Nah bei Köln
    Beiträge
    252
    BTW: Benutze Firefox (Mozilla/5.0 (Windows; U; Windows NT 6.1; de; rv:1.9.2.8) Gecko/20100722 Firefox/3.6.8)
     

  9. #9
    Avatar von Sven Mintel
    Sven Mintel Sven Mintel ist offline Mitglied
    Registriert seit
    Aug 2003
    Beiträge
    18.238
    Blog-Einträge
    6
    Schaue mal in das input#country

    Dort steht folgendes:
    onblur="fill();"
    fill() wird ohne Parameter aufgerufen, wenn es den Fokus verliert...ergibt "undefined"

    Prüfe vor $.post() , ob fill() überhaupt einen Parameter übergeben bekommen hat.
    Wenn nicht, dann führe blende nur #suggestions aus und mache sonst nichts.

    Sollte ca. so aussehen(ungetestet)
    Code :
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    
    function fill(thisValue) 
    {
      if(typeof thisValue=='String' && thisValue.match(/\S/))
      {
        $('#country').val(thisValue);       
        $.post("redirect.php", 
                {queryString: ""+thisValue+""}, 
                 function(data)
                 {
                  if(data.length >0) 
                  {
                    window.location.href= data;                 
                  }
                });
        }
        setTimeout("$('#suggestions').fadeOut();", 300);
    }

    Ansonsten: du solltest sicher stellen, dass die redirect.php wirklich nur URLs ausgibt, wenn sie ein Ergebnis hat, und nichts sonst(momentan gibts dort im Fehlerfall eine PHP-Fehlermeldung, welche den User ins Nirvana schickt, weil diese Fehlermeldung keine URL ist).
    Du könntest da im Fehlerfall auch bspw. einen anderen HTTP-Status-Header senden als 200, dann landet $.post() nicht in der Callback-Funktion.
    Geändert von Sven Mintel (07.09.10 um 17:07 Uhr)
     

  10. #10
    Registriert seit
    Jun 2008
    Ort
    Nah bei Köln
    Beiträge
    252
    Hey Sven,

    du bist ein Schatz! Joa, ich sende einfach ein "#" und dann ist gut.
     

Ähnliche Themen

  1. Antworten: 6
    Letzter Beitrag: 11.02.10, 08:44
  2. Antworten: 3
    Letzter Beitrag: 23.07.09, 12:45
  3. [Matlab] Überprüfen ob eine Variable einen Wert enthält
    Von venom im Forum Sonstige Sprachen
    Antworten: 6
    Letzter Beitrag: 18.03.08, 11:22
  4. Antworten: 2
    Letzter Beitrag: 01.05.07, 16:07
  5. Taskmng.exe enthält Virus
    Von putzi im Forum Security (Viren, Trojaner, Spam)
    Antworten: 4
    Letzter Beitrag: 21.09.06, 23:06