ugrás a tartalomhoz

Új, Ajaxal hívott html oldalon nem működik a javascript

PHPprogramozo · 2009. Nov. 20. (P), 18.06
Sziasztok!

Adott egy php script, ami egy html kimenetet ad. Ebbe a html kimenetbe tettem bele egy gombot, amit rákötöttem egy ajax hívásra. Eddig ez tiszta sor, mint ahogy egy normál oldalnak működnie kell, műxik ez is.

Ajax segítségével meghívok szintén egy php-t, tulképpen így postolok adatokat majd a php kimenetét beleírom az oldalba az ajax hívás végén. Ez is megy.

Ami nem megy és kezdek megőrülni tőle..:

Az Ajax hívás során a php generált egy html-t. Ebbe tettem egy ilyen js-t.

... html további részek
<script type='text/javascript'>
alert('mukodj');
</script>
... html további részek

Nohh a bajom az hogy a kód köré épülő html elemek csodásan lefutnak, megjelennek a szövegek meg minden, de ez a javascript semmi pénzért nem műxik. Tudnátok ebben segíteni, hogy miért lehet ez? Nem vagyok egy nagy JS mágus és itt elakadtam.

Köszi előre is!
 
1

Próba

Poetro · 2009. Nov. 20. (P), 21.08
Próbáld meg a <script> elemedet kiszedni a kapott tartalomból mondjuk reguláris kifejezéssel, vagy DOM műveletekkel, és DOM műveletekkel a <head>-be rakni inkább.

szerk: Illetve most nézem, a jQuery kódjában, hogy elméletben, ha jQuery-vel töltesz be load-dal HTML tartalmat, akkor a script elemeket eleve kiszedi a tartalomból, mivel ez IE esetén Permission Denied hibát eredményez.

Amit tehetsz, hogy JSON formában töltöd be a HTML és külön a script részeket, és a script-et külön futtatod, vagy használod a már készen levő több plugint amik ilyen problémák megoldására születtek.
2

minta

PHPprogramozo · 2009. Nov. 20. (P), 22.01
Köszi, esetleg tudnál erre valami példát mutatni, mert azt se nagyon tudom, hogy keressek rá..
4

Példa

Poetro · 2009. Nov. 20. (P), 22.44
Esetleg tudnál példát mondani arra, mit használsz?
5

Én ezt használom

PHPprogramozo · 2009. Nov. 21. (Szo), 10.47
Én ezt használom.. Mint mondtottam nem vagyok js guru, szóval működő példára vadásztam a neten.

function communication(url, parameters, contentTarget, fname) {

// ha szeretnénk a feldolgozás végén futtatni egy function-t
if (fname) {
funcForEnd = fname;
}

// beállítjuk a targetet
targetElementId = $(contentTarget);

http_request = false;
// Mozilla, Safari,...
if (window.XMLHttpRequest) {
http_request = new XMLHttpRequest();
if (http_request.overrideMimeType) {
http_request.overrideMimeType('text/html');
}

}
// IE
else if (window.ActiveXObject) {
try {
http_request = new ActiveXObject("Msxml2.XMLHTTP");
} catch (e) {
try {
http_request = new ActiveXObject("Microsoft.XMLHTTP");
} catch (e) {}
}
}

if (!http_request) {
alert('Cannot create XMLHTTP instance');
return false;
}

http_request.onreadystatechange = stateChanged;
http_request.open('POST', url, true);
http_request.setRequestHeader("Content-type", "application/x-www-form-urlencoded");
http_request.setRequestHeader("Content-length", parameters.length);
http_request.setRequestHeader("Connection", "close");
http_request.send(parameters);

}
7

POST

PHPprogramozo · 2009. Nov. 21. (Szo), 10.51
Jahh igen a lényeg, hogy postolva küldöm az adatokat, gondolom úgy 'biztonságosabb' meg szebb is nem?

Köszi a helpet!
3

jquery.load() callback?

Ustak · 2009. Nov. 20. (P), 22.19
Ha jqueryt használsz, akkor nem próbálod a load függvény callback -jét? Bármilyen függvényt le tudsz vele futtatni. jquery.load() callback
Én emlékszem még ajaxmániás koromban készítettem olyan oldalt ahol a thickbox galériáját hívogattam le ajax-al, és utána kötöttem hozzá a click eseményt, tökéletesen működik...
Vagy lehet hogy nem értettem a problémát :-)
Üdv:
Gábor
6

prototype.js

PHPprogramozo · 2009. Nov. 21. (Szo), 10.50
Most néztem meg ezt a jquery-t ez olyan lehet mint a prototype nem?
Én a prototype-ot használom, vagyis eddig nem sok mindent használtam belőle.
A jquery jobb, vagy másabb?

Köszi a helpet!
8

jquery

Drawain · 2009. Nov. 21. (Szo), 11.34
Frissebb és a használata intuitívabb. Sokaknak (pl. nekem) ez kényelmesebb keretrendszer, mint a Prototype. Arról nem is beszélve, hogy milyen community és fejlesztőbrigád áll mögötte.
9

Köszi

PHPprogramozo · 2009. Nov. 22. (V), 10.40
Köszi, kipróbálom akkor a jquery-t
10

JQUERY

PHPprogramozo · 2009. Nov. 25. (Sze), 21.11
Sziasztok újra!

Sajna nem oldódott meg a problémám, illetve van egy új is, amiben a segítségeteket kérem.

Van egy js alapú color picker, ami úgy műxik, hogy az összes class="color" taggel ellátott input text alatt egy color pickert jelenít meg ha beleklikkelsz a mezőbe. Ez is simán megy, de ha behívok egy oldalt így:
$("#"+cellId).load("modify.inc.php", {limit: 25}, 
    function() {
         alert("The last 25 entries in the feed have been loaded");
    }
);
akkor szépen behozza az oldal végeredményét a kívánt helyre, de pl a color picker már nem műxik ezen az ajax hívott oldalrészen. Miért lehet ez?

Előre is köszi a helpet mindenkinek!
11

Inicializálás

Poetro · 2009. Nov. 25. (Sze), 21.16
Mert a betöltött tartalomra nem lett inicializálva a colorpickered. Miután betöltöd a tartalmat, azaz ahol most az alert-ed szerepel kellene inicializálni a betöltött tartalom részegységre, azaz a $("#"+cellId)-re.
12

ini

PHPprogramozo · 2009. Nov. 25. (Sze), 21.27
Ééértem. Kérlek, kérlek mutass egy példát, hogy kell inicializálni az új tartalomra bármit is?!

Előre is köszi
13

Inicializálás

Poetro · 2009. Nov. 25. (Sze), 22.33
Mivel nem tudom (és különösebben nem is érdekel), hogy mit használsz, de álljon itt egy példa hogyan kell hozzákapcsolni valamilyen eseményt az újonnan betöltött tartalomhoz.
$("#"+cellId).load("modify.inc.php", {limit: 25}, function() {
  // this megegyezik azzal amibe a tartalmat beletoltottuk
  // megkeressuk az ujonnan betoltott tartalomban a linkeket, 
  // es azok mousoverjehez rakunk egy esemenyt.
  $(this).find('a').mouseover(fuction () { alert("inicializalva vagyok")});
  alert("The last 25 entries in the feed have been loaded");  
});
14

Gyengébbek kedvéért

PHPprogramozo · 2009. Nov. 26. (Cs), 11.01
Köszönöm a választ, de nem igazán egy új function bevezetésére gondoltam.

Kérlek magyarázd el gyengébbek kedvéért is, hogy hogy is van ez?!

Tehát van egy ilyen kódom. Meghívok egy php-t ami megy is. A hívás végén rákeresek az összes text mezőre, hogy alkalmazzam rajtuk a már korábban bevezetett és elkészített function-t ami csak annyit csinál, hogy kiemeli a text mezők hátterét, ha ráklikkelek.
Persze ez már nem műxik. Megtalálja a text mezőket, csak nem alkalmazza rá a focusField function-t.

Ez a kód van benne, a még nem ajax hívott kódban, ami működik is rendesen az oldalon
function focusField(elementId) {
    
    var targetId = $("#"+elementId).get(0); 
    
    backCol = targetId.style.backgroundColor;
    textCol = targetId.style.color;
    
    targetId.style.backgroundColor = '#D6E9FF';
    targetId.style.color = '#000';
    
}
Az ajax hívás
$("#"+cellId).load("/ajax/"+type+".inc.php", {
      'rowId': rowId
}, function() {  
   $(this).find('input[type="text"]').focus( focusField(elementId) );
});
A cél az lenne, hogy a fenti kódot szeretném alkalmazni az új ajax hívott oldalon. Egyáltalán nem jól indulok neki?
$(this).find('input[type="text"]').focus( alert("HELLO") ); 
Köszi előre is
15

link

PHPprogramozo · 2009. Nov. 26. (Cs), 11.04
Ha csak egy linket tudnál adni ahol ezt leírják, azt is megköszönném, mert nem igazán tudom, hogy hogyan keressek rá. A JQUERY load példáknál nem találtam erről semmit.

Előre is köszi