Ajax oldal betöltése után scriptek nem futnak
Sziasztok!
A probléma Ajax-al hívok be egy oldalt div-be
A betöltés után nem élnek a scriptjeim.Próbáltam úgy is hogy lokálissan beraktam az oldalba, de ezután sem megy.
Hol a hiba?
1 <html>
<script></script>
stb
<div>Ajax oldal</div>
Ajax oldal
<html>
stb...
tartalom click nem megy
2 <html>
<script></script>
stb
<div>Ajax oldal</div>
Ajax oldal
<html>
<script></script>
stb...
tartalom click így sem megy
köszönöm a segítséget
■ A probléma Ajax-al hívok be egy oldalt div-be
A betöltés után nem élnek a scriptjeim.Próbáltam úgy is hogy lokálissan beraktam az oldalba, de ezután sem megy.
Hol a hiba?
1 <html>
<script></script>
stb
<div>Ajax oldal</div>
Ajax oldal
<html>
stb...
tartalom click nem megy
2 <html>
<script></script>
stb
<div>Ajax oldal</div>
Ajax oldal
<html>
<script></script>
stb...
tartalom click így sem megy
köszönöm a segítséget
link?
Egyébként azt a sok html elemet nem értem. Teljes forráskódot töltesz be ajax-al? (html elemtől elkezdve a záró html elemig betöltőd?)
üdv:
Balázs
igen
Nem túl egészséges.
Szerintem azt töltsd be ami valóban változik. (magyarán div-eket, span-eket tartalmazó adatot kérjél le)
üdv:
Balázs
magyarázat
de a lényeg hogy adatokat rögzítenek vele.Ebben van a javascript ami az ajax hívás után már nem működik.
nem találja a funkciókat
Van egy másik form amiben a paramétereket állítom. pl ID dátum ezeket átadom Ajaxba maj postolva betöltöm
a divbe
Tehát az egész formot újra töltöm a kapott paraméterek alapján.
Demo
Mert forráskód nélkül csak elbeszélünk egymás mellett.
üdv,
Balázs
okés feltöltva
amokor a calendar 1 betöltődik az input mezőbe kattintva egy naptárnak kellene előjönnie.
Ez a calendar egy nagyobb formban kellene hogy működjön amit ajaxal töltök be.
window.onload
Lehet csak a demo miatt volt de:
Amikor bezáródik a naptár akkor azt valóban tüntesd el a kódból, ne csak display:none adj neki. Azért mondom mert ha az user 10 szer módosítja a dátumot akkor 11 szer fogja a kód létrehozni a naptárt, csak az első 10 nek display:none lesz a stílusa. De nyilván az volna szép ha eleve nem készítenél mindig új naptárt hanem az előzőt használnád, ezzel rögtön elejét vennéd annak hogy teleszemeled a html forrást.
Másik hogy légyszíves ne légy lusta:
üdv,
Balázs
most igy néz ki
var cal1;
var dateFrom = null;
var dateTo = null;
cal1 = new dhtmlxCalendarObject('calInput1');
</script>
<p> You can attach calendar to input object.1</p>
<table >
<tr>
<td valign="top"><strong>Click in a text fild</strong><br />
<input type="text" id="calInput1" style="width: 200px; font-size:12px;" readonly="true">
</td>
</tr>
</table>
sajna nem fut
nem úgy nézz ki
tipp: Töröld a sütiket hátha az miatt van az hogy nem azt látod amit én. (Egyébként a fenti kódoddal nála működött. Csak hát ahogy én látom nem az van a szerveren.)
üdv,
Balázs
köszi
köszi
valami nem ok nálam. visszaraktam a callt nem okés + cache ürit + süti ürit firebug mutatja hogy ok a cal1 bent van
lehet pofátlan?
átküldenéd a nálad levő xmlhttp.js + a html filéket
firebug
üdv,
Balázs
ha itt ülnél
Nálad meg megy. az általam megadott linkről futtatod? gondolom igen :)
probálom IE6 és firefox 3 de nem ok
jelenleg nálam se jó.
Szerkesztve: Nem hagyott nyugodni. Nem kezdi el értelmezni a javascript kódot. (rakj bele egy alert ot a szerveren és elvileg meglátod). Viszont ha firebug-al elkezdem szerkeszteni (akárcsak egy entert rakod bele) akkor már értelmezni. Na mármost ez nem megoldás, ezért azt tanácsolom hogy a <script> részt JavaScriptből készítsd el ajax híváskor és utána csak a magát a js forrást ad hozzá a már html ben lévő <script> elemhez.
Elvileg így már jó kell legyen bár, az még zavar hogy a <script> elemet vagy a <head>-ba vagy a <body> elebe szokták beágyazni nem <div> ekbe. De ettől függetlenül szerintem értelmeznie kéne ott is.
Szerkesztve2: Cseréld meg a scriptet meg a táblázatot (ajax válaszban).
üdv,
Balázs
köszönöm
igazad van
magyarázat
Attól hogy egy div innerHTML tulajdonságát megváltoztatod és írsz bele valami szöveget meg script-et, miért várod el, hogy a script lefusson?
Ki mondta, hogy ennek így kell működnie?
Ha az xmlHttpRequest-től visszakapott adatok függvényében valamit futtatni akarsz, szerintem tedd meg akkor amikor azokat visszakapod.
Ui: Ha a firebug-ban átírod a forrást ("beleraksz egy enter-t"), újra feldolgozza a HTML-t, amiben már ott a script és ezért fut le. Nagyon jó dolog a firebug, de ne hagyjátok hogy becsapjon benneteket, és elhitesse hogy ez a normális működés.
példa
nem tőlem kérded de
De ezt írtam a 13. bejegyzésemben (első szerkesztés után) hogy így add hozzá a js-t a html hez.
jaczkog: Valóban most bedőltem a firebug szép ruhájának és ezért kicsit félre is vezettem a kérdezőt emiatt. Elnézést tőle.
üdv,
Balázs
hiba
A másik hozzászólásomban láthatod, hogy ezt milyen trükkel szokás megkerülni.
Más kérdés, hogy még soha nem volt rá szükségem. Szerintem a szöveg kiíratás nem erre való.
tudom ám.
A másik kódom meg nem kell megkerülni csak kijavítani. Lásd a másik hozzászólásom
üdv,
Balázs
példa
Talán az alert(2) a legegyszerűbb. (És nem mellékesen működik.)
Az alert(3), amit solkprog javasolt nem csúnya megoldás, de most kipróbáltam és IE6 alatt nem működik. (Vagy csak nálam van valami gebasz.)
A 4. megoldás állítólag működik, de túl macerás és lusta vagyok kipróbálni.
Ezekkel csak az a baj, hogy a kérdező valószínűleg valami előre megírt AJAX lib-et használ, és nincs hatással a visszakapott szöveg kiírására. De ha nem is így van, akkor is nehéz elválasztani a ténylegesen kiírandó szöveget és a futtatni kívánt script-et.
A javaslatom az lenne, hogy minden ilyen spéci visszatérési értékű dologhoz írj külön függvényt:
köszönöm
de ezt még ma lezongorázom
köszönöm hogy az idődból szántál rám pár percet.
egyébként
<link rel="STYLESHEET" type="text/css" href="calendar/dhtmlxcalendar.css">
<script src="calendar/dhtmlxcommon.js"></script>
<script src="calendar/dhtmlxcalendar.js"></script>
ezeket a külső fájlban helyezem el
aminek belül kéne lennie.
alert('ok')
cal_vasarlasido = new dhtmlxCalendarObject('cal_vasarlasido', false,{isMonthEditable: true,isYearEditable: true})
cal_vasarlasido.loadUserLanguage('hu')_vasarlasido.setYearsRange(1900, 2500)
cal_vasarlasido.setOnClickHandler(vasarlasido)
cal_vasarlasido.draw()
function vasarlasido(date) {document.getElementById('vasarlasido').value = cal_vasarlasido.getFormatedDate(null,date)document.getElementById('cal_vasarlasido').style.display = 'none'dateFrom = new Date(date)return true}
function showCalendar(calnev) {document.getElementById(calnev).style.display = 'block')
</script>
<form ...>
<table>
<div id="cal_vasarlasido" style="display:none; position:absolute;"></div><input type="text" name="vasarlasido" id="vasarlasido<?php echo $i;?>" readonly="true"><img onClick="showCalendar('cal_vasarlasido')" src="js/calendar/imgs/calendar.gif">
</table>
</form>
több calendar elem van a formon
nincs mit
Ha mindenáron a szerveroldalról szeretnél javascript-et küldeni, akkor sajnos neked kell értelmezni a responseText-et, és eldönteni hogy mit kell kiírni és mit kell futtatni a fent leírt módon.
Viszont ha lenne saját naptár cuccod, akkor az input mező onfocus / onclick eseményére kapásból be tudnád rakni a megfelelő dolgokat, nem kéne ilyen kötötten generálni a naptárat.
Én mindenképpen ez utóbbit választanám, már csak a kihívás kedvéért is. :)
Jobban belegondolva, lehet hogy ezzel is meg lehetne oldani, hogy minden naptárral kapcsolatos script-et onclick-be raksz. Talán ez lenne a legegyszerűbb.
azért
alert(3) kis módosítással tökéletes.
alert(2): Működni működik de azt hiszem ezzel egyetértünk hogy ez nem túl szép módszer.
alert(3) ("megoldásom"): Át kell írni az innerHTML et text -re és jó lesz IE ben is.
alert(4): Szép megoldás és az is működik.
Bár annyira nem teszteltem le az "alert(3)" illetve "alert(4)" et de úgy vettem észre hogy nem zavar be a többi kód (html, stb) életébe.
üdv,
Balázs
kipróbáltam
{
if(ajaxRequest.readyState > 0 || ajaxRequest.readyState < 4)
{
/*var ajaxDisplay = document.getElementById('munkalapok');
ajaxDisplay.innerHTML = "<img src=loading.gif />";*/
}
if (ajaxRequest.readyState == 0 ||ajaxRequest.readyState == 4)
{
params = "";
ajaxRequest.open("POST","calendar1.html", true);
ajaxRequest.setRequestHeader("Content-Type","application/x-www-form-urlencoded");
ajaxRequest.onreadystatechange = handleMunkalapMessages;
ajaxRequest.send(params);
}
}
function handleMunkalapMessages()
{
if(ajaxRequest.readyState == 4 && ajaxRequest.status == 200)
{
//
var cal1, cal2, mCal, mDCal, newStyleSheet;
//
var dateFrom = null;
var dateTo = null;
cal1 = new dhtmlxCalendarObject('calInput1');
}
}
hibával elszáll firefox
script dinamikus betöltése
Üdv,
Felhő
ajax fetcher
illetve a DHTMLX -esek válasza
The simple injecting html data in page will not execute code in script section ( at least not in FF )
You need to use any lib which can handle inline js in loaded code, or use your own custom code to resolve problem, something similar to next.
document.getElementById(obj).innerHTML = ajaxRequest.responseText;
var z = ajaxRequest.responseText.match(/<script[^>]*>[^\f]*?<\/script>/g);
if (z)
for (var i=0; i<z.length; i++){
if (window.execScript)
window.execScript(z[i].replace(/<([\/]{0,1})script[^>]*>/g,""));
else
window.eval(z[i].replace(/<([\/]{0,1})script[^>]*>/g,""));
}