Hallo hmm,
ich vermute eine Race-Condition, d.h. der Ajax-Callback läuft, bevor das DOM fertig aufgebaut ist.
Am einfachsten ist, wenn Du den Ajax-Request komplett in den Ready-Handler schiebst.
Wenn es deine Absicht ist, Seitenaufbau und Datenbeschaffung zu parallelisieren, dann setze den Ajax-Call in ein Promise, das Du bei Eintreffen der Daten resolvest. Und in den ready-Handler setzt du promise.then(...).
var getData = new Promise(function(resolve, reject) {
$.ajax( {
// übrige Parameter
success: resolve; // promise-Resolver ist 1:1 als success-Funktion nutzbar,
error: function(req, status, error): reject({ status, error });
});
});
// JQuery Readyhandler setzen
$(function() {
// hier die Seiteninitialisierung
// AJAX Ergebnis abholen (erfolgt asynchron, sobald Daten verfügbar sind)
getData.then(function(data) {
// Hier der Code aus deinem ehemaligen success-Handler
})
.catch(function(ajaxError) {
// Handling je nach ajaxError.status und ajaxError.error
});
});
Rolf
--
Dosen sind silbern
Dosen sind silbern