Avatar billede sovetryne Nybegynder
26. december 2008 - 16:45 Der er 16 kommentarer og
1 løsning

Gemme AjAX-resultat i en variable

Jeg må indrømme, at jeg er rimelig ny til AjAX.
Det, jeg vil opnå, er at jeg kan fange resultaterne fra AjAX i en Javascript-variable.

Jeg bruger følgende kode:

  function selectcust(customernumber)
  {
    document.getElementById('txtHint').innerHTML = '';
    collectcustomerdata(customernumber);
  }

Altså, når man klikker på et link, der peger til "java script:selectcust(218)", så starter den functionen "selectcust" med "customernumber" som parameter.

Den function åbner "collectcustomerdata"-functionen, og sender samme parameter med.

"collectcustomerdata"-functionen ser sådan ud:

  function collectcustomerdata(custno)
    {
    xmlHttp=GetXmlHttpObject();
    if (xmlHttp==null)
      {
      alert ("Your browser does not support AjAX!");
      return;
      }
    var url="collectcustomerdata.php";
    url=url+"?customer="+custno;
    url=url+"&sid="+Math.random();
    xmlHttp.onreadystatechange=stateChanged;
    xmlHttp.open("GET",url,true);
    xmlHttp.send(null);
    }

Den henviser til nogle andre functioner:

function GetXmlHttpObject()
  {
    var xmlHttp=null;
    try
    {
      xmlHttp=new XMLHttpRequest();
    }
    catch (e)
    {
      try
      {
        xmlHttp=new ActiveXObject("Msxml2.XMLHTTP");
      }
      catch (e)
      {
        xmlHttp=new ActiveXObject("Microsoft.XMLHTTP");
      }
    }
    return xmlHttp;
  }

  function stateChanged()
  {
    if (xmlHttp.readyState==4)
    {
      document.getElementById("txtHint").innerHTML=xmlHttp.responseText;
    }
  }

Det hele virker fint, og "collectcustomerdata.php" virker også fint: den giver uden problemer resultatet af den pågældende kunde i browseren. Men DET jeg vil opnå, er følgende:

Jeg får resultatet i browseren som plain text - men jeg vil gerne have resultatet fanget i en variable, så at jeg kan bruge det i en "alert", eller hvad jeg nu vil. Og det lykkes simpelthen ikke. Jeg har forsøgt at få collectcustomerdata.php til at "echo'e" resultatet som '<div id="catched">'.$result.'</div>', jeg har forsøgt at sende det som form-element - men jeg kan simpelthen ikke få fingrene i de elementer jeg sender.

Hvordan gør jeg dette? Nogen der har en idé?
Avatar billede olebole Juniormester
26. december 2008 - 17:19 #1
<ole>

Hvis du forsøger at sende HTML-formaterede data tilbage til browseren, har du (som så mange andre) misforstået Ajax. Du sender en post-forespørgsel til serveren med et XMLHttpRequest objekt.

På serveren henter du data i databaser, filer og hvad-ved-jeg, hvorefter du formaterer dem som JSON eller XML. Herefter sendes de tilbage til klienten, hvor de sættes ind i sidens DOM-træ ved hjælp af DOM.

Du kan finde en langt bedre og opdateret XMLHttpRequest wrapper her:
    http://www.dengodekode.dk/artikler/ajax/xmlhttprequest_wrapper.php

- og her kan du se et par eksempler på brugen:
    http://www.eksperten.dk/spm/817625

/mvh
</bole>
Avatar billede sovetryne Nybegynder
26. december 2008 - 18:07 #2
Jeg var allerede bange for, at jeg havde misforstået Ajax. Jeg indrømmer også blankt, at jeg har sat mine første steps i Ajax  for mindre end 24 timer siden.

Jeg kigger lige på de links du har skrevet, og hvis det hjælper, så beder jeg dig om at give mig et svar, og så får du pointsene.

Albert
Avatar billede sovetryne Nybegynder
26. december 2008 - 18:47 #3
Jeg havde allerede læst artiklen (eller tutiklen, som du kalder det) (det forklarer også hvorfor farven på det øverste link var anderledes), men jeg syntes ikke at jeg kunne bruge det, på trods af, at tutiklen var skrevet i et forståeligt sprog.
Nu har jeg alligevel brugt dine scripts, men jeg får en Access Denied så snart jeg prøver at anvende det rigtige ActiveX-object. Nå, jeg forsøger endnu at ændre nogle ting, men ellers må jeg bare give op.
Avatar billede olebole Juniormester
26. december 2008 - 18:54 #4
Prøv at linke til et eksempel. Ellers er det næsten ikke til at fortælle, hvad du skal ændre  =)
Avatar billede olebole Juniormester
26. december 2008 - 18:55 #5
Tester du på en server - og ligger begge dokumenter på samme server?
Avatar billede sovetryne Nybegynder
26. december 2008 - 19:06 #6
Jeg prøver at få http://www.havecom.dk/einvoice/invoice2009.php til at virke. I det øverste felt begynder man at skrive en del af navnet på en kunde, og så burde der dukke en liste op. Jeg havde det delvis til at virke i http://www.havecom.dk/einvoice/invoice2009a.php , men der stødte jeg jo på problemet, at jeg dataene tilbage i plain text, og det kunne jeg ikke få over til en variable.
Det hele ligger iøvrigt i samme mappe på min server.
Avatar billede sovetryne Nybegynder
26. december 2008 - 19:37 #7
Hmmm, jeg fandt ud af, at jeg havde glemt at sætte

<script language="Javascript">
  function myCallBack(oHttp)
  {
    if (oHttp.readyState<4) return;
    oHttp = null;
  }
</script>

ind i koden. Nu får jeg ingen fejl mere, men til gengæld får jeg heller ikke nogen resultater. På en måde er jeg kommet længere. Nu skal jeg bare se, hvad jeg skal gøre med den der callback-function - jeg formoder at jeg der kan gøre noget med resultaterne... Men hvad?
Avatar billede sovetryne Nybegynder
26. december 2008 - 22:40 #8
Problemet er løst: man kan gemme resultaterne i en variable i functionen stateChanged()
Tak Ole, men du har rimelig vildledt mig. Jeg brugte mine gamle scripts, som jeg iøvrigt har fra w3schools.org - en rimelig pålidelig kilde. Altså havde jeg udemærket forstået hvordan Ajax virker.
Avatar billede sovetryne Nybegynder
26. december 2008 - 22:40 #9
Sagen afsluttes
Avatar billede olebole Juniormester
27. december 2008 - 00:18 #10
w3schools.com's tutorial har stort set intet med Ajax at gøre. Derudover har vi gang på gang her på Eksperten påvist, at hans sider er fyldt med seriøse fejl, mangler og udeladelser - så det kan næppe kaldes en pålidelig kilde.

Det kan godt være, du er blevet vildledt - men det er ikke af mig  ;o)
Avatar billede sovetryne Nybegynder
27. december 2008 - 01:01 #11
Det er fint, Olebole, men nu er der én person der har kommenteret (udover mig) i dette indlæg, og den person har vildledt mig ved at give links, som ikke løser mit problem, men kun forværrer det. Derimod har løsningen fra w3schools givet mig min XMLHTTP-request til at virke - det har dine links ikke. Så må "I" (hvem det end er), synes at w3schools er upålidelig, mit problem er løst med den løsning, de kom med. Der opstod godt nok et nyt problem bagefter, men det ville også være opstået hvis jeg havde fået dine anvisninger til at fungere.

Måske har w3schools ikke noget med Ajax at gøre - man skal lede en del mere på Google efter Ajax, for at støde ind i dine links, end for at komme på w3schools.

Men hvad ved jeg - jeg er bare en dum newbie. Mig ikke ved noget om det.

Venlig hilsen


Albert van Harten
Avatar billede olebole Juniormester
27. december 2008 - 02:18 #12
Jeg kender dig ikke, så jeg kan ikke vide det - men udfra dit reaktionsmønster at dømme, har du sikkert ret  =)
Avatar billede sovetryne Nybegynder
27. december 2008 - 12:58 #13
@Olebole
Jeg bruger ikke Eksperten så ofte - det kan være både godt og skidt...
Avatar billede olebole Juniormester
27. december 2008 - 19:28 #14
Der hersker næppe tvivl om, det kunne være en stor fordel for dine kodevaner, hvis du brugte den noget oftere - så jeg kan ikke lige få øje på det gode  =)
Avatar billede sovetryne Nybegynder
27. december 2008 - 22:22 #15
At du ikke kan få øje på det gode, kan måske have noget at gøre, at du ikke har set de andre avancerede scripts som jeg har lavet, og som virker upåklageligt. Man kan ikke basere ens kendskab på noget vedkommende IKKE ved, men udelukkende på det, vedkommende ved... Jeg kan ikke bedømme Prins Henriks sprogevner på det faktum, at han ikke taler polsk og tjekkisk, men kun på det faktum, at han taler flydende fransk og kinesisk, og klarer sig (uanset folks højrøvede meninger) rimelig godt på dansk.
Avatar billede olebole Juniormester
28. december 2008 - 11:25 #16
Ja, det har helt sikkert noget at gøre med, at jeg kun har set dig tumle forvirret rundt med begynderproblemer i JavaScript. Det er jo, som du selv er inde på, det eneste, du har ført dig frem med i disse spalter ... altså lige bortset fra dine påståede evner til at bedømme højden på dine medmenneskers røv!

Hvis du havde vist noget, der kunne hæve dig fra de absolutte begynderes niveau, ville jeg såmænd også tro på, du har skrevet avancerede JavaScripts. I en anden tråd har du dog slået fast, at du er på Herrens mark, allerede når det kommer til helt simpel behandling af variabler. Kender man ikke forskel på at deklarere en variabel med eller uden 'var', har man _alt_ at lære indenfor JavaScript.

Derfor kan jeg umuligt tro dine påstande. Don't tell me ... show me!  ;D
Avatar billede sovetryne Nybegynder
28. december 2008 - 13:03 #17
Du ser spøgelser.
Som jeg også sagde før: mine scripts var fine - det var RÆKKEFØLGEN der var problemet.

"Don't tell me, show me"... Nytter det noget? Du tror alligevel ikke på mig. Og du finder sikkert et sted en lille fejl og hænger mig dermed ud som den Store Newbie. Så nej tak. Så vil jeg hellere, at der er en eller anden højrøvede Olebole, der tror at han er herre og mester over Javascript - mens jeg stille og roligt kører mit firma videre, og tjener penge ved det. Jeg laver altså ikke scripts for at vinde konkurrence. Jeg blæser på Janteloven. Jeg er ligeglad med at der er andre der tror at jeg ikke kan programmere. Så længe jeg bare tror på mig selv.

"Kender man ikke forskel på at deklarere en variabel med eller uden 'var', har man _alt_ at lære indenfor JavaScript". Så altså KAN man ikke vide hvordan man laver en for-next-loop (uden next - men sådan har jeg nu bare lært det i tidernes morgen, kald det bare en for-loop) uden at vide hvad forskel mellem global og local er? Man KAN heller ikke vide hvordan en simpel document.write virker uden at kende forskel? Men ved heller ikke hvordan en enkel echo virker? Eller string.length? Eller en Math.random? Det er allesammen ting man IKKE kender til, hvis man ikke ved hvad forskel er mellem local og global? Altså ALT hvad jeg nu ved om Javascript har jeg lært i de sidste 24 timer? ALT? Helt 100%? Sig mig, hvorfor begynder så ENHVER Javascript-kursus med "Hello World", og ikke med "var"? Ved du hvad, lad bare være med at sige noget, medmindre du gerne vil have det sidste ord. Hr. Professor Olebole er uanset hvad bedre end alle andre, for HAN skriver på Eksperten, verdens førende website om Javascript og andre IT-sager.
Ha' det godt, og drøm sødt. Jeg vælger nok mere pålidelige kilder, hvor jeg kan løse de problemer jeg støder på. Hvis du nu havde løst mit problem, så var jeg nok tilbøjelig til at tro på dig, men du greb fuldstændig ved siden af.

Albert
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

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