Avatar billede g0t Nybegynder
24. september 2008 - 21:57 Der er 8 kommentarer

AJAX og PHP vil ikke virke

Hej. Kan ikke få dette til at funke. Ingen fejl eller noget. Data kommer bare ikke tilbage. Kører localhost med wamp.

<script type="text/javascript"> 
/* ajax.Request */ 
function ajaxRequest(url,data) { 
  var aj = new Ajax.Request( 
  url, { 
  method:'get', 
  parameters: data, 
  onComplete: getResponse 
  } 
  ); 

/* ajax.Response */ 
function getResponse(oReq) { 
  $('result').innerHTML = oReq.responseText; 

</script>

<input type="text" id="myval" size="10"> 
                             
<input type="button" value="GO" onClick="ajaxRequest('bin/parse.php', 'val='+$F('myval'))"> 
                           
<div id="result"></div>

PHP, parse.php
<?
if(isset($_GET['val'])) { 
  echo "You entered: ".$_GET['val']; 
}
?>
Avatar billede olebole Juniormester
24. september 2008 - 22:21 #1
<ole>

Det er ikke til at sige, da vi ikke kan se resten (bla.a. funktionen 'ajaxRequest'). Derudover har det nu ikke meget med Ajax at gøre  =)

Det er ikke meningen med Ajax, at man skal skrive HTML ud på serveren. Derimod sendes de rå data tilbage til browseren i XML- eller JSON-format. Her indsættes data i HTML-elementer, som oprettes med DOM - og elementerne indsættes i sidens DOM-træ.

innerHTML har derimod aldrig været valid i nogen standard og har en hel del bagdele

/mvh
</bole>
Avatar billede olebole Juniormester
24. september 2008 - 22:27 #2
Desuden er det en rigtig skidt idé at bruge '$' i variabel- og funktionsnavne. '$' er i ECMA-standarden (som JavaScript bygger på og skal overholde) reserveret til brug i forbindelse med maskinkode ... hvilket ens egne funktioner ikke har noget at gøre med.

Desværre er der opstået en skidt mode blandt nogle mindre kompetente kodere, som gør, at man i visse kredse finder '$' 'funky' i funktionsnavne. Tjah ... der er jo også folk, der heller vil hoppe rundt ovenpå togvognene i stedet for at køre inde i dem. Det kan dog ikke anbefales i længden  =)
Avatar billede g0t Nybegynder
24. september 2008 - 22:36 #3
Okay, fandt af jeg ikke havde hentet prototype.js som er et lib, men linket var dødt. Nu prøver jeg med dette istedet. Det virkede fint med document.form... bla bla. men med document.getById('result')... bla bla virker det ikke..

<script type="text/javascript">
function ajaxFunction()
{
var xmlHttp;
try
  {
  // Firefox, Opera 8.0+, Safari
  xmlHttp=new XMLHttpRequest();
  }
catch (e)
  {
  // Internet Explorer
  try
    {
    xmlHttp=new ActiveXObject("Msxml2.XMLHTTP");
    }
  catch (e)
    {
    try
      {
      xmlHttp=new ActiveXObject("Microsoft.XMLHTTP");
      }
    catch (e)
      {
      alert("Your browser does not support AJAX!");
      return false;
      }
    }
  }
  xmlHttp.onreadystatechange=function()
    {
    if(xmlHttp.readyState==4)
      {
      document.getById("result").innerHTML=xmlHttp.responseText; <- Virker ikke
document.myForm.time.value=xmlHttp.responseText; <- virker, men skal bruge den anden.
      }
    }
  xmlHttp.open("GET","time.php",true);
  xmlHttp.send(null);
  }
</script>

// virker ikke
<a href="#" onclick="ajaxFunction();">Comments</a> 
<div id="result"></div>

virker, men skal bruge den anden
<form name="myForm">
Name: <input type="text"
onkeyup="ajaxFunction();" name="username" />
Time: <input type="text" name="time" />
</form>

</body>
</html>
Avatar billede g0t Nybegynder
24. september 2008 - 22:37 #4
omg er for træt :) getElementById hedder det jo..
Avatar billede olebole Juniormester
24. september 2008 - 22:44 #5
prototype.js har en bunke uhensigtsmæssigheder - om end det er vældig udbredt ... men det er lungekræft jo også  ;D

Her kan du læse om, hvorfor du bør undgå innerHTML:
    http://www.dengodekode.dk/artikler/DOM/no_innerhtml.php

- og her kan du finde en betydeligt bedre XMLHttpRequest wrapper:
    http://www.dengodekode.dk/artikler/ajax/xmlhttprequest_wrapper.php

- og i denne tråd viser jeg, hvordan den bruges:
    http://www.eksperten.dk/spm/817625
Avatar billede olebole Juniormester
24. september 2008 - 22:49 #6
- men du kan ikke bruge 'dokument.getElementById' på andet end dit div. Den virker naturligvis ikke på dine formfelter, da de ikke har nogen ID  ;o)
Avatar billede g0t Nybegynder
24. september 2008 - 22:54 #7
Ved jeg self godt. Har koden fra en tutorial hvor de bruger form, derfor jeg ville lave den om til id istedet.
Avatar billede repox Seniormester
25. september 2008 - 15:46 #8
olebole >
Jeg har lige gennemgået http://www.dengodekode.dk/artikler/DOM/no_innerhtml.php og testet din hastighedstestside. Umiddelbart kan jeg ikke nikke genkende i hverken IE eller FF at innerHTML er langsomt. Faktisk er innerHTML op til tre gange så hurtig som DOM.
At det så ikke ligefrem er gyldigt, er jo så en anden snak - det virker trods alt.
Avatar billede Ny bruger Nybegynder

Din løsning...

Tilladte BB-code-tags: [b]fed[/b] [i]kursiv[/i] [u]understreget[/u] Web- og emailadresser omdannes automatisk til links. Der sættes "nofollow" på alle links.

Loading billede Opret Preview
Kategori
Vi tilbyder markedets bedste kurser inden for webudvikling

Log ind eller opret profil

Hov!

For at kunne deltage på Computerworld Eksperten skal du være logget ind.

Det er heldigvis nemt at oprette en bruger: Det tager to minutter og du kan vælge at bruge enten e-mail, Facebook eller Google som login.

Du kan også logge ind via nedenstående tjenester