Voiko Ajaxilla hakea JS function joka sitten suoritetaan? Voi, eval oli taikasana. Siis ongelma ratkaistu ;)
Ei välttämättä tarvitse evalia.
// JS-funktio.html <html> <head> <script src="js-funktio.js"></script> </head> <body onLoad="funktio();"> </body> </html>
// js-funktio.js
function funktio() {
document.write("foobar");
}Ja eikun tuota HTML-sivua requestaamaan AJAXilla. Jos tarvitsee lukea käyttäjän syötteitä niin se onnistuu tämä Request.QueryString-luokan kautta.
Kokeilin tuota, mutta sain toimimaan ainoostaan silloin jos tulosti AJAXilla pyydetyn HTML sivun document.write. Document.write tyhjentää kokosivun joten se ei ole oikein käyttökelpoinen. Tarkoitus olisi, että vain haluttu osa muuttuisi.
Saakos tuota toimimaan mitenkään innerHTML tai vastaavien kanssa?
Mitenkä ja mitä elementtiä tahdot muutella? Mikä olisi tuon XMLHttpObjectin haluttu responsetext?
Div elemettiä yritän ja sen muuntelu kyllä onnistuu allaolevalla, mutta tällöin tuo HTML sivussa oleva JS jää tylysti suorittamatta, ihan kuin sitä ei edes olisi.
document.getElementById('info').innerHTML=http_request.responseText;
Jos taas koitan document.write(http_request.responseText); niin tällöin JS toimii ongelmitta.
Pistä koko koodi näkyviin niin tietää paremmin sanoa.
Tässä on koodia näytille, koodi on yhestä esimerkistä vain tätä ongelmaa varten tehty joten älä kiinitä huomiota mihkään epäolennaiseen.
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
<html xmlns="http://www.w3.org/1999/xhtml"><head>
<script type="text/javascript" language="javascript">
var http_request = false;
function teePyynto(url)
{
http_request = false;
if (window.XMLHttpRequest)
{ // Mozilla, Firefox, Safari, ...
http_request = new XMLHttpRequest();
if (http_request.overrideMimeType)
{
http_request.overrideMimeType('text/xml');
}
}
else if (window.ActiveXObject)
{
// IE
try
{
http_request =
new ActiveXObject("Msxml2.XMLHTTP");
}
catch (e)
{
try
{
http_request =
new ActiveXObject("Microsoft.XMLHTTP");
}
catch (e)
{ }
}
}
if (!http_request)
{
alert('Virhe! ( XMLHTTP -oliota ei voitu luoda');
return false;
}
http_request.onreadystatechange = alertSisalto;
http_request.open('GET', url, true);
http_request.send(null);
}
function alertSisalto()
{
if (http_request.readyState == 4)
{
if (http_request.status == 200)
{
document.getElementById('info').innerHTML = http_request.responseText;
// Tällä JS toimii
//document.write(http_request.responseText);
}
else
{
alert('Http-kutsussa oli ongelmia.');
}
}
}
</script>
<style>
#info {background : #e0ffdd}
</style>
</head>
<body>
<a href="#" onclick="teePyynto('testi.html')">testi</a>
<br />
<br />
<br />
<br />
<br />
<div id="info">--</div>
</body></html>testi.html
kukkuu
<script type="text/javascript" language="javascript">
alert('kukkuu');
</script>Ilmeisestikin XMLHttpObjektin requestilla haetaan vain haettavan sivun tuloste, eikä näytetä mitä kulissien takana tapahtuu. Eli tuo alert kyllä suoritetaan (tai sitten sen yli hypätään), se ei vain näy käyttäjälle. Esimerkkikoodin perusteella tästä voisi jättää AJAX-osion kokonaan pois ja laittaa tuohon linkkiin <a href="#" onClick="alert('kukkuu')">testi</a>.
Tuo oli vain esimerkki, ei tätä juttua voi tehdä suoraan tuolleen kun JS pätkä riippuu kellonajasta, järjestelmän tilasta jne.... tulee eräänlaiseen valvontasysteemiin. Tosin evalin kanssa onnistuu.
Voitko laittaa esille sen JS-pätkän muokaten vaikkapa parametreja, että näkyisi mitä funktioita se suorittaa. Pistä vaikka mailiin jos se on arkaluontoisempaa koodia. Jäi kaivelemaan pahasti tämä ongelma :).
Mielelläni en laittaisi koodia tänne enkä mailiinkaan kun ei ole ollut mitään puhetta saako koodia julkistaa vai ei. Tylsää perus JS koodia jokatapauksessa eikä yhtään mielenkiintoista vaikka niin voisi ajatella.
Sattumalta löysin tämmöisen ratkaisun yhdestä JS oppaasta.
function load_js(file){
var element = document.createElement('script');
element.setAttribute('src', file);
document.body.appendChild(element);
}Opiskelija kirjoitti:
Mielelläni en laittaisi koodia tänne enkä mailiinkaan kun ei ole ollut mitään puhetta saako koodia julkistaa vai ei.
Javascript näkyy kyllä käyttäjälle vaikka et haluaisikaan :)
Meitsi kirjoitti:
Javascript näkyy kyllä käyttäjälle vaikka et haluaisikaan :)
Aivan, mutta kun tämä tuleekin yrityksen sisäiseen käyttöön joten hieman eriasia kuin foorumissa julkaisu tai puoltuntemattomalle mailissa. Ja kenties ohjataan kosketusnäytöltä mikäli jostain semmoinen ylimääräinen löytyy ja toimii tämän kanssa joten välttämättä käyttäjä ei sitä JS koodia saakkaan kaivettua vaikka haluaisikin kun ei pääse käsiksi selaimen valikoihin jne...
Aihe on jo aika vanha, joten et voi enää vastata siihen.