CodeIgniter, jQuery und die getScript() Funktion

Diese Woche bin ich in der Firma mal wieder über ein Problem (bzw. eine Aufgabe *g*) gestolpert.

Solltet ihr jemals auf die Idee kommen die getScript()-Funktion von jQuery zu nutzen um JavaScript-Code auszuführen den ein CI-Controller zurückliefert werdet ihr sehr wahrscheinlich über das Problem stolpern, dass getScript() an die URL die ihr aufruft ein “?_=xxxx” anhängt. Angenommen Ihr wollt also

http://eure-domain/gib/mir/javascript

aufrufen, dann ruft jQuery in Wirklichkeit z.B.

http://eure-domain/gib/mir/javascript?_=1234567890

auf. Dies macht jQuery um das Caching zu verhindern. Für CI ist das aber tödlich und führt zu einem klassischen “404 – Page not found” Fehler.

Man kann dieses Verhalten leider nicht ohne weiteres umgehen (es sei denn, man aktiviert in CI die Nutzung des Query-Strings wieder was aber ein paar Nachteile hat). Allerdings gibt es einen einfachen Ersatz. Statt getScript() nutzt man einfach die ajax() Funktion von jQuery:

$.ajax({
        type:     "GET",
        url:      "http://eure-domain/gib/mir/javascript",
        dataType: "script",
        cache:    true
});

Wichtig dabei ist das “cache: true” weil man sonst wieder in das gleiche Problem läuft. Um das Caching trotzdem zu verhindern sollte man im Controller auf jeden Fall die No-Cache Header mitsenden und man kann natürlich auch statt

http://eure-domain/gib/mir/javascript

einfach

http://eure-domain/gib/mir/javascript/eine_zufällige_zahl

aufrufen. CI stört sich nicht an dem zusätzlichen Parameter und im Controller kann man ihn einfach ignorieren.

Ich hoffe ich kann damit jemandem nervige Debugging-Zeit ersparen :-)

Kurz-URLs:http://tinyurl.com/4es5qrg
http://bit.ly/5CXohn

Verwandte Themen:

  1. jQuery Tagit – Komfortable Tag-Eingabe

Christian

Baujahr 1976, Software-Entwickler und Web-Designer aus Leidenschaft, Erfahrung in gefühlten 9342049 Programmiersprachen (PHP, Perl, C#, VB.Net, VB6, Delphi um nur einige zu nennen), in der Vergangenheit an diversen Open Source Projekten beteiligt (allen voran das gute alte YaBB und YaBB SE)

Ein Kommentar zu “CodeIgniter, jQuery und die getScript() Funktion”

  1. Tweets die CodeIgniter, jQuery und die getScript() Funktion | tagdocs.de erwähnt -- Topsy.com

    [...] Dieser Eintrag wurde auf Twitter von Christian Land, Web Development Team erwähnt. Web Development Team sagte: jQuery getScript() ohne dynamische jQuery URL Parameter: http://bit.ly/8Ef5GQ [...]