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:

$(document).ready( function() {
		$("a").click(function(){
		if ($(this).attr("rel")=="ajax")
		{
			showAjaxloader();
			//egy html kódot szúr be a /body elé, ami egy animált gif,
			//a böngésző terület közepén (ajax loader)
			var url=$(this).attr("href");
			$("head").load("index.php?getheader="+url+"&ajax=true", function(response, status, xhr) {
				$(".content").load("index.php?page="+url+"&ajax=true", function(response, status, xhr) {
					//az ajax loader eltüntetése, html kódjának törlése
					$("#ajaxloader").fadeOut('fast', function() {
						$("#ajaxloaderBG").fadeOut('fast', function() {
							$("#ajaxloaderBG").remove();
							$("#ajaxloader").remove();
						});
					});
				});
			});
			
			return false;
		}
	});
});
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
$('body').on('click','a',function(e){
e.preventDefault(); //ez meg return false helyett..
});
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!