# Php werte in jquery variable speichern für autocomplete



## Rouven50 (10. Nov 2012)

hey..ich bin dabei ein autocomplete für städte und postleitzahlen zu erstellen.. ich habe ein formular inputfeld wo ich stadtnamen bzw plz eingeben kann und mittels jquery ajax dann meine autocomplete.php immer bei "keyup" aufrufe und die werte dann mittels "data" auslese - siehe hier:

```
<script type="text/javascript">
$(document).ready(function() {

	$("#searchform").keyup(function(){

		if($('#plz').val().length > 3){
			$.ajax({
				url: 'autocomplete.php?p='+$('#plz').val(),
				type:'GET',
				success: function(data) {
					//laed die ergebnisse von der suchanfrage
					var availableTags = [data];
				    $( "#plz" ).autocomplete({
				        source: availableTags
				    });
				}
			});
		}
	});
	
   
})
</script>
```

in der *var availableTags* müssen die werte nach folgendem schema gespeichert werden 

```
var availableTags = ["Test","Test1","Test2","usw"]
```

deswegen gebe ich die werte in der autocomplete so aus:


```
while($current = mysql_fetch_array($result)){
	echo '"'.$current['name'].' - '.$current['zipcode'].'",';
}
```


nun zu meinem problem: die ausgabe im autocomplete teil funktioniert soweit..allerdings werden die ergebnisse nicht untereinander angezeigt sonst so: 
"Emden, Ostfriesland - 26721","Emden, Ostfriesland - 26723","Emden, Ostfriesland - 26725", 

weil die availableTags wohl mit der übergabe so nicht klarkommt..hat jemand eine idee wieso? bzw was ich ändern muss..wäre super!!

besten dank schonmal


----------



## Final_Striker (10. Nov 2012)

Versuche es mal mir einem "<br>"-Tag am Ende der Zeile.


----------



## Rouven50 (10. Nov 2012)

hm ne tut sich auch nichts..gibt den übergebenen wert genauso aus.. sprich:

"Emden, Ostfriesland - 26721",<br> "Emden, Ostfriesland - 26723",<br> "Emden, Ostfriesland - 26725",<br> 

wenn ich das so schreibe: 

```
var availableTags = ["Emden, Ostfriesland - 26721", "Emden, Ostfriesland - 26723", "Emden, Ostfriesland - 26725", ];
```

dann gehts.. <br/> wird gar nicht gebraucht..habe es schon rausgenommen..aber ich verstehe nicht warum das nicht klappt.. wenn ich alert(data) ausgebe..wird mir der string genauso angezeigt "Emden, Ostfriesland - 26721", "Emden, Ostfriesland - 26723", "Emden, Ostfriesland - 26725",  nur komischerweise geht es nicht wenn ich es direkt in die variable auslese..bzw wird fehlerhaft ausgegeben

habe auch schon data.toString() versucht..klappt auch nicht..echt keine ahnung warum er das nicht machen will


----------



## Rouven50 (11. Nov 2012)

hat keiner eine idee? habe schon alles mögliche an suchbegriffen bei google ausprobiert aber nichts passendes gefunden.. habe alles auf utf-8 eingestellt..diverse javascript methoden versucht aber nichts funktioniert.. ich mein in

var availableTags = [data]; steht doch eig var availableTags = ["emden", "emden1", "usw",]; nach der suche.. weil "data" den wert ja zurückliefert


mfg


----------



## Schandro (11. Nov 2012)

setzt den content-type von deinem 
	
	
	
	





```
$.ajax(
```
 Aufruf auf JSON (oder lass ihn auf "intelligent guess" und stell stattdessen sicher das dein PHP den Content Type des HTTP-Antwort-Headers korrekt setzt)

Alternativ kannst du auch 
	
	
	
	





```
$.parseJSON(data)
```
 aufrufen um es selber in ein object zu parsen. Zurzeit übergibst du nämlich an die .autocomplete-Methode ein array mit der Länge 1 wo der komplette JSON als ein String drinnen steht.

PS: den ganzen Thread hier hättest du dir übrigens auch sparen können wenn du einfach innerhalb der success-function 
	
	
	
	





```
console.log(data)
```
 aufgerufen hättest und während des Webseitenaufrufes bspw. Firebug offen gehab hättest. Dann hättest du direkt gesehen das der typ der Variable data String und nicht Object ist. Mit 
	
	
	
	





```
alert
```
 zu debuggen macht niemand der Firebug oder andere Web Development Toolbars installieren kann.


----------



## Rouven50 (11. Nov 2012)

hey danke schon mal  ich versuche es jetzt mit $.parseJSON(data); aber irgendwie bekomme ich keine ausgabe..sorry bin noch nicht so der pro in sachen jquery/javascript.. ich habe mir auf folgendes angeschaut und das ist eig äquivalent zu meinem code: Load JSON data with jQuery



```
<script type="text/javascript">
$(document).ready(function() {

	$("#searchform").keyup(function(){
		//bekommt alle parameter uebergeben und holt werte aus der search.php und fuegt die in das div searchresult ein
		if($('#plz').val().length > 1){
			$.ajax({
				url: 'autocomplete.php?p='+$('#plz').val(),
				type:'GET',
				datatype: 'text',
				success: function(data) {
					//laed die ergebnisse von der suchanfrage
					var availableTags = [$.parseJSON(data)];
				    $( "#plz" ).autocomplete({
				        source: availableTags
				    });
				}
			});
		}
	});

})
</script>
```

desweiteren habe ich in meiner php den header auf json gestellt sowie json_encode (habe ich im internet ein beispiel gefunden) macht man das so? weil zur zeit werden zwar keiner errors angezeigt aber die ausgabe bleibt leer


```
<?php
header('Content-type: text/json');
header('Content-type: application/json');
session_start();
include('../../config.php');
include('../../function.php');

if(isset($_GET['p'])){ $param = mysql_real_escape_string($_GET['p']); }else{ $param = ""; }

$result = mysql_query("SELECT * FROM Geo_city AS GC INNER JOIN Geo_plz AS GP ON GC.id = GP.city_id WHERE (GC.name LIKE '%".$param."%' OR GP.zipcode LIKE '%".$param."%') order by GC.id LIMIT 20");

while($current = mysql_fetch_array($result)){
	print json_encode ("'".$current['name']." - ".$current['zipcode']."',");
}
?>
```


----------



## Schandro (11. Nov 2012)

```
var availableTags = [$.parseJSON(data)];
```
Das Ergebniss hiervon ist ein verschachteltes Array. Mach das 
	
	
	
	





```
[
```
 und 
	
	
	
	





```
]
```
 weg, dann sollte es klappen.


----------



## Rouven50 (11. Nov 2012)

hm geht leider noch nicht..muss man denn den content-type noch auf json haben? weil du ja meintest parseJSON wäre alternativ dazu..deswegen habe ich das rausgenommen.. der header in der php datei müsste doch auch richtig definiert sein - oder sehe ich das falsch?
danke schon mal für deine bemühungen

*habe es nun so gelöst: *


```
<script type="text/javascript">
$(document).ready(function() {

	$("#searchform").keyup(function(){
		
		if($('#plz').val().length > 1){
			$.ajax({
				url: 'autocomplete.php?p='+$('#plz').val(),
				type:'GET',
				success: function(data) {
					//laed die ergebnisse von der suchanfrage
					var availableTags = data.split(';');
				    $( "#plz" ).autocomplete({
				        source: availableTags
				    });
				}
			});
		}
	});

})
</script>
```


```
<?php
session_start();
include('../../config.php');
include('../../function.php');

if(isset($_GET['p'])){ $param = mysql_real_escape_string($_GET['p']); }else{ $param = ""; }

$result = mysql_query("SELECT * FROM Geo_city AS GC INNER JOIN Geo_plz AS GP ON GC.id = GP.city_id WHERE (GC.name LIKE '%".$param."%' OR GP.zipcode LIKE '%".$param."%') order by GC.id LIMIT 20");

while($current = mysql_fetch_array($result)){
	print utf8_encode ($current['name'].' - '.$current['zipcode'].';');
}
?>
```


----------

