Manchmal ist das Update auf ein neues Release einer Software nicht ganz so unproblematisch wie man es gerne hätte.
Bis zu jQuery 1.5b1 lief folgender Code problemlos:
$('.autocomplete').autocomplete({
source: function(request, response) {
$.getJSON('system/autocomplete.user.php', {
term: extractLast(request.term)
}, response);
},
search: function() {
var term = extractLast(this.value);
if (term.length < 2) {
return false;
}
},
focus: function() {
return false;
},
select: function(event, ui) {
var terms = split( this.value );
terms.pop();
terms.push( ui.item.label );
terms.push('');
this.value = terms.join(', ');
return false;
}
});
Ab 1.5RC1 allerdings nicht mehr - ohne einen JavaScript Fehler zu verursachen kommt nun einfach keine Auswahl für das Autocomplete mehr.
Nach langem (langem, langem....) Suchen konnten wir die folgende Codestelle im jQuery Framework ausmachen, die "verantwortlich" ist.
In Version 1.5 ist das etwa Zeile 6930 gewesen.
// Detect, normalize options and install callbacks for jsonp requests
jQuery.ajaxPrefilter( "json jsonp", function( s, originalSettings, dataIsString /* internal */ ) {
dataIsString = ( typeof s.data === "string" );
if ( s.dataTypes[ 0 ] === "jsonp" ||
originalSettings.jsonpCallback ||
originalSettings.jsonp != null ||
s.jsonp !== false && ( jsre.test( s.url ) ||
dataIsString && jsre.test( s.data ) ) ) {
Diese Codestelle und der danach folgende Code sorgen dafür, dass auch bei der Angabe von dataType json der Request unseres Autocompletes in jsonp geändert wird.
Folgender Code schafft Abhilfe, wenn er vor dem Aufruf des Autocomplete integriert wird:
$.ajaxSetup({
jsonp: null,
jsonpCallback: false
});
Der Grund dafür ist, dass im jQuery Framework als neuer Standard folgendes steht:
// Default jsonp settings
jQuery.ajaxSetup({
jsonp: "callback",
jsonpCallback: function() {
return jQuery.expando + "_" + ( jsc++ );
}
});
Das führt dazu, dass die weiter oben genannte Abfrage
if ( s.dataTypes[ 0 ] === “jsonp” || originalSettings.jsonpCallback || originalSettings.jsonp != null || …. usw
immer zutrifft, wenn man die Standard-Angaben nicht überschreibt.
Warum kommt dann keine Ausgabe?
Das liegt einfach daran, dass der Server via php mit json_encode() ein JSON Objekt erzeugt. Das sieht zum Beispiel so aus: [{'name':'xyyyyy','num':2}]
Wird nun aber von jQuery ein jsonp als Rückgabe angenommen, so versucht jQuery den Code als Javascript auszuführen (bzw. in die Seite einzubetten) statt das JSON Objekt zu verarbeiten und dies schlägt natürlich fehl.
Nachtrag: Seit jQuery 1.6 ist der Aufruf von $.ajaxSetup() nicht mehr länger notwendig. Aber er schadet auch nicht, wenn der Code möglichst mit allen Versionen kompatibel sein soll.
Nach diesen Begriffen suchten die Benutzer:
- jquery suggestion not working
- php autocomplete jquery
- jquery 1 5 2 autocomplete
- jquery ui autocomplete object
- autocomplete ?term=
- jquery autocomplete select
- autocomplete jquery rückgabewert
- jquery probleme versionen
- jquery ui autocomplete not working
- jquery autocomplete version changes
- autocomplete jQuery 1 5
- jquery update 1 5 jqueryui
- autocomplite mit JQuery UI
- mozilla jquery is not a function
- mozilla jquery is not a function
- request term autocomplete
- jquery autocomplete problem
- jquery autocomplete 1 5
- jquery jsonp funktioniert nicht
- htc desire jquery autocomplete not working
- jquery autocomplete term nicht da
- jquery autocomplete jsonp
- jquery ui autocomplete select
- jquery ui autocomplete
- autocomplete jquery
FEB




danke für den beitrag! hat mir viel zeit gespart!
OMG, Danke! Dieses Problem hat mich den ganzen Tag gekostet! Warum steht sowas nirgendwo in der Doku?