Gå til innhold

(AJAX) Funksjon fungerer kun riktig inline i HTML, ikke i ekstern .js


Anbefalte innlegg

Jeg har en funksjon loadXMLDoc, som tar url som parameter, eks.: loadXMLDoc(findItem.php?iid=3).

 

Inline i HTML funker riktig:

<button type="button" id="button" onclick="loadXMLDoc('findItem.php?iid=3')">Vis varen</button>

 

Henvisning i ekstern .js funker ikke riktig. findItem.php blir lastet inn før jeg har trykket på knappen:

function init() {
 button = document.getElementById('button');
 button.onclick= loadXMLDoc('findItem.php?iid=4');
}
window.onload = init;

 

Hvordan kan jeg fikse den eksterne henvisningen, slik at findItem.php ikke blir lastet inn før jeg trykker på knappen?

Lenke til kommentar
Videoannonse
Annonse

Du har en funksjon i et eksternt javascript. I denne funksjonen sier du at noe skal skje. Men kaller du ikke denne funksjonen noe sted, vil ikke noe skje. Dette skjer når du forsøker å legge javascriptet i eksternt javascript. Anbefaler ellers bruk av jQuery (blant annet for enkelhetens skyld). Last inn jQuery i head:

 

<script type="text/javascript" src="http://ajax.googleapis.com/ajax/libs/jquery/1.4.0/jquery.min.js"></script>

... Og følgende vil fungere utmerket:

 

$().ready(function() {
   $("#button").click(function(){
       // Her kan du si hva som skal skje ved klikk på elementet med id #button. 
   });
});

Ellers ser du trolig at jeg i eksemplet laster inn jQuery fra Google. Dette er et hett tips, da mange allerede har lastet ned javascriptet (ligger i brukerens caché). Du slipper også å bruke båndbredde/hosting, og Google gir en nedlastingstid du ikke vil klare å slå. :!:

Endret av bardoien
Lenke til kommentar

Jeg glemte å vise hele JavaScriptet, Jeg burde kanskje gjort det, beklager. Delen under init-funksjonen er hentet fra AJAX-tutorialen på w3schools.

 

function init() {
 button = document.getElementById('button');
 button.onclick = loadXMLDoc('findItem.php?iid=4');
}
window.onload = init;

var xmlhttp;
function loadXMLDoc(url)
{
if (window.XMLHttpRequest)
 {// code for IE7+, Firefox, Chrome, Opera, Safari
 xmlhttp=new XMLHttpRequest();
 xmlhttp.onreadystatechange=stateChange;
 xmlhttp.open("GET",url,true);
 xmlhttp.send(null);
 }
else
 {// code for IE6, IE5
 xmlhttp=new ActiveXObject("Microsoft.XMLHTTP");
 xmlhttp.onreadystatechange=stateChange;
 xmlhttp.open("GET",url,true);
 xmlhttp.send();
 }
}

function stateChange()
{
if (xmlhttp.readyState==4)
 {
 if (xmlhttp.status==200)
   {
   // process whatever has been sent back here
   document.getElementById('test').innerHTML=xmlhttp.responseText;
   }
 else
   {
   alert("There was a problem in the returned data");
   }
 }
}

 

Ellers setter jeg pris på forslaget. jQuery ser ut til å være veldig fint og flott, men jeg tror jeg vil dra mest fordel utav det ved å beherske litt mer vanlig JavaScript først.

Lenke til kommentar

Å endre fra function window.onload = init; til window.onload = init(); er ikke en løsning. Anbefaler at dere leser dere opp på anonyme funksjoner og callbacks. Endre heller fra følgende.

 

function init() {
 button = document.getElementById('button');
 button.onclick= loadXMLDoc('findItem.php?iid=4');
}

.. til følgende.

 

function init() {
 button = document.getElementById('button');
 button.onclick= function(){loadXMLDoc('findItem.php?iid=4');};
}

Hvorfor dette løser problemet (avhengig av at du ikke har noen flere..) lar jeg stå som en liten øvelse.

Endret av Jonas
Lenke til kommentar

Dette endrer dessverre ingenting. Det er slik jeg har gjort det i tidligere javascript også.

 

Ja, se der, hehe! Ser jeg har lest litt feil her. Du skriver at loadXMLDoc kjører uansett. Slik jeg så det, burde ikke denne kjøre i det hele tatt. Løsningen Jonas beskriver her burde ellers fungere. :)

Lenke til kommentar

Opprett en konto eller logg inn for å kommentere

Du må være et medlem for å kunne skrive en kommentar

Opprett konto

Det er enkelt å melde seg inn for å starte en ny konto!

Start en konto

Logg inn

Har du allerede en konto? Logg inn her.

Logg inn nå
×
×
  • Opprett ny...