ugrás a tartalomhoz

jQuery, Ajax, html HEAD probléma

Adam87 · 2012. Nov. 3. (Szo), 14.18
Szervusztok!

Egy olyan kódot írok, amelynek segítségével az oldalon a linkre kattintva a böngésző nem tölti újra az oldalt, hanem csak a tartalmat cseréli ki.
A jQuery és Ajax segítségével sikerült összehozni a dolgot, még a HEAD részt is lefrissíti, azonban van egy kis problémám. :S

Az újratöltéseket ez a JS kód végzi:
  1. $(document).ready( function() {  
  2.         $("a").click(function(){  
  3.         if ($(this).attr("rel")=="ajax")  
  4.         {  
  5.             showAjaxloader();  
  6.             //egy html kódot szúr be a /body elé, ami egy animált gif,  
  7.             //a böngésző terület közepén (ajax loader)  
  8.             var url=$(this).attr("href");  
  9.             $("head").load("index.php?getheader="+url+"&ajax=true"function(response, status, xhr) {  
  10.                 $(".content").load("index.php?page="+url+"&ajax=true"function(response, status, xhr) {  
  11.                     //az ajax loader eltüntetése, html kódjának törlése  
  12.                     $("#ajaxloader").fadeOut('fast'function() {  
  13.                         $("#ajaxloaderBG").fadeOut('fast'function() {  
  14.                             $("#ajaxloaderBG").remove();  
  15.                             $("#ajaxloader").remove();  
  16.                         });  
  17.                     });  
  18.                 });  
  19.             });  
  20.               
  21.             return false;  
  22.         }  
  23.     });  
  24. });  
A problémám az, hogy bár az ajax kérésekre kapott válasz megfelelő és jó helyre is kerül, mégis a böngésző nem használja az új HEAD részt, kizárólag a régit.
Emiatt nem működnek az újonnan betöltött javascript kódok sem a stíluslapok.
Tud nekem ebben valaki segíteni, van erre valamilyen megoldás?

Előre is köszönöm!
 
1

Head-be ajax?

Pepita · 2012. Nov. 4. (V), 23.58
Én ilyet még nem láttam/hallottam, nem tudom, hogy lehet-e... De tegyük fel: ezt még lehet.

De ha a head-ben lecseréled a "szöveget" (pl. css-link), mi fogja megmondani a böngésződnek, hogy "olvasd újra"?! Mondjuk pont egy frissítés... (Most beugrott a reload, de valszeg erre nem használható.)

Ezen kívül úgy tűnik, hogy mindent cserélsz némi kevéske kiegészítő tartalmi elemen kívül, emiatt eleve kérdéses, hogy a két ajax-kérés gyorsabb/jobb lenne, mint egyetlen refresh/redirect. A kieg. cuccost lehet (kell) szerveroldalon cache-elni, az ajax nem túl jó komplett oldalcserére, inkább egy-egy pici részlet frissítésére.

És még a JS-nélküli működésről nem is szóltam: műxik majd úgy is?

De ha mindenképp így akarod, akkor a JS-eket húzhatod <body>-n belülre is, a load lefutása után pedig meghívod belőlük az inicializáló fv-t.
2

Olvasd újra

Adam87 · 2012. Nov. 5. (H), 19.02
Valóban az a probléma, hogy úgymond nem olvassa újra a head részt.
Jó, hát ha nem lehet, akkor nem csináljuk!

Minden esetre köszi a választ!

A JS nélküli működésről gondoskodtam! Alapjáraton, ha nincs engedélyezve, akkor a böngésző megy a href-ben megadott címre.
A JS-ek body-n belülre húzásával nem érek el sokat, mert a stílus fájlok is változank a különböző pluginok miatt.
Na sebaj!
Arra következtetek, hogy 2 megoldás marad:
1. Ha nem egy robot nyitja meg az oldalt, akkor betöltődik minden CSS és JS file, így elég 1 ajax kérés és minden szépen megy, mert csak a TITLE-t kell felülírni.
Ha robot nyitja meg az oldalt, akkor meg nincs ajax...

2. Egyáltalán nem alkalmazok ajaxot... :D

Még egyszer köszönöm a válaszod, számomra tanulságos volt!
3

keress rá. a

szabo.b.gabor · 2012. Nov. 5. (H), 20.02
keress rá. a stackoverflow.com-on általában értelmes válaszok vannak.

az $('a').click(); helyett érdemes volna
  1. $('body').on('click','a',function(e){  
  2. e.preventDefault(); //ez meg return false helyett..  
  3. });  
valahogy így megvalósítani
4

Köszönöm, ki fogom próbálni

Adam87 · 2012. Nov. 7. (Sze), 21.02
Köszönöm, ki fogom próbálni és majd visszajelzek!
5

Sajnos ez sem jó megoldás, de

Adam87 · 2012. Nov. 11. (V), 09.36
Sajnos ez sem jó megoldás, de azért köszönöm a tippet!