[Ajax] POST-Variable enthält undefined, Script-Teil enthält richtigen Wert

WorldRacer

Erfahrenes Mitglied
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:
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);
	}
 
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.
 
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:
foreach($names as $name)
{
   echo '<li onClick="fill(\''.htmlentities(addslashes($name)).'\');">'.htmlentities($name).'</li>';
}

Im Klartext:

HTML:
<li onClick="fill('Shrek 2');">Shrek 2</li>
 
Hmm, auch das funktioniert problemlos bei mir.

Bist du sicher, dass du in der redirect.php die korrekte Variable abfragst-> $_POST['queryString']
 
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.
 
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:
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.
 
Zuletzt bearbeitet:

Neue Beiträge

Zurück