Du verwendest einen veralteten Browser. Es ist möglich, dass diese oder andere Websites nicht korrekt angezeigt werden. Du solltest ein Upgrade durchführen oder ein alternativer Browser verwenden.
Php werte in jquery variable speichern für autocomplete
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:
PHP:
<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
PHP:
var availableTags = ["Test","Test1","Test2","usw"]
deswegen gebe ich die werte in der autocomplete so aus:
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!!
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
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
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
Code:
$.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
Code:
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
Code:
alert
zu debuggen macht niemand der Firebug oder andere Web Development Toolbars installieren kann.
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
PHP:
<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:
<?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']."',");
}
?>
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:
PHP:
<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:
<?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'].';');
}
?>