Kirjautuminen

Haku

Tehtävät

Keskustelu: Nettisivujen teko: Pien Ajax-kysymys

Sivun loppuun

Opiskelija [13.08.2006 13:37:23]

#

Voiko Ajaxilla hakea JS function joka sitten suoritetaan? Voi, eval oli taikasana. Siis ongelma ratkaistu ;)

tsuriga [13.08.2006 14:05:31]

#

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.

Opiskelija [13.08.2006 20:27:40]

#

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?

tsuriga [13.08.2006 21:09:48]

#

Mitenkä ja mitä elementtiä tahdot muutella? Mikä olisi tuon XMLHttpObjectin haluttu responsetext?

Opiskelija [13.08.2006 21:25:23]

#

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.

tsuriga [13.08.2006 22:15:01]

#

Pistä koko koodi näkyviin niin tietää paremmin sanoa.

Opiskelija [14.08.2006 11:47:06]

#

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>

tsuriga [14.08.2006 12:36:05]

#

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>.

Opiskelija [14.08.2006 22:13:45]

#

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.

tsuriga [14.08.2006 23:41:16]

#

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 :).

Opiskelija [20.08.2006 17:05:39]

#

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);
}

Meitsi [20.08.2006 17:12:35]

#

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 :)

Opiskelija [20.08.2006 18:31:12]

#

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...


Sivun alkuun

Vastaus

Aihe on jo aika vanha, joten et voi enää vastata siihen.

Tietoa sivustosta