Avatar billede sovetryne Nybegynder
27. december 2008 - 00:27 Der er 18 kommentarer og
1 løsning

Gennemtvinge at afslutte en function

Se http://www.havecom.dk/einvoice/invoice2009.php

I kilden kan der ses, at jeg i starten af scriptet deklarerer en variabel, kaldt RespText, og giver den værdien 'empty'.

Så følger der to XMLHTTP-søgemål i træk. Den første finder i getcustomerdata.php kunder, hvor navnet, adressen eller hvad som helst indeholder det, man skriver i feltet "Address1" i formularen "Invoice", og den returnerer så kundenumrene til ALLE kunder, der matcher, inkl. et link til en function, som hedder selectcust, med kundenummeret som parameter.

Functionen selectcust sender en ny XMLHTTP-request til serveren (via collectcustomerdata.php, med kundenummeret som parameter), og den returnerer en string med kundedata, der hører til den pågældende kunde. Det virker fint nok. Der kommer så f.eks. en string tilbage, som hedder "Firma Petersen||Peter Petersen||Storegade 1||7400||Herning". Den string gemmes i xmlHttp.responseText, og den kan jeg uden problemer lægge ind document.Invoice.Address1.value. Men så sker der det, at SÅ længe man IKKE har afsluttet functionen selectcust, ved at klikke på noget andet (en button, et link eller hvad som helst), at SELVOM der står Firma Petersen||Peter Petersen||Storegade 1||7400||Herning i feltet, scriptet TROR at der står det, man har tastet ind som søgemål før den første XMLHTTP-request. Først, når man har klikket på noget andet, betragter den den nye værdi af feltet som et faktum.
Ligeledes husker den IKKE, at jeg har sagt at RespText får en ny værdi, medmindre selectcust-functionen er afsluttet.

Altså: hvordan gennemtvinger jeg, at scriptet betragter selectcust som afsluttet, uden at man først skal klikke et eller andet sted?

Venlig hilsen


Albert van Harten
Havécom Danmark
Avatar billede olebole Juniormester
27. december 2008 - 02:34 #1
<ole>

Du erklærer xmlHttp som global variabel. Så er du naturligvis nødt til at vente til det ene kald er returneret, før du kan kalde igen. Det er det stik modsatte af Ajax!
På den anden side, kan du ikke erklære variablen som lokal, når du anvender den type kode og struktur.

Nu ved jeg jo fra en anden tråd, at du bliver dybt fornærmet, hvis man prøver at få dig til at bruge en hensigtsmæssig kodestruktur, så det vil jeg afstå fra ... du ved, hvor du kan lære det  =)

/mvh
</bole>
Avatar billede sovetryne Nybegynder
27. december 2008 - 13:05 #2
Jeg bliver ikke dybt fornærmet, Olebole, men hvis jeg spørger nogen til råds - og de råd jeg får, gør min kode til slet ikke at virke - så må man gå ud fra at det ikke er det man skal bruge. Især hvis man får at vide, at man ikke har forstået noget som helst af Ajax - lidt mindre nedladende ville være en god idé.
Jeg indrømmer, at jeg ikke ved så meget om det der Global / Local, men at begge dele er "Ajax" (Asynchronous Javascript and XML), er et faktum. Ajax = Ajax - om det nu er global eller local. Du har måske en anden definition af Ajax - jeg holder mig hellere til den almindelige forklaring af begrebet.

Albert van Harten
Avatar billede sovetryne Nybegynder
27. december 2008 - 13:14 #3
"Variables that exist only inside a function are called Local variables. They have no presence outside the function. The values of such Local variables cannot be changed by the main code or other functions. This results in easy code maintenance and is especially helpful if many programmers are working together on the same project.
Variables that exist throughout the script are called Global variables. Their values can be changed anytime in the code and even by other functions." (kilde: www.webdevelopersnotes.com).

Jeg ved ikke om du overhovedet har set min kode, men jeg erklærer kun ÉN variabel udenfor en function (altså: som global), hele xmlHttp-molevitten er INDENFOR functioner, altså LOCAL.
Avatar billede olebole Juniormester
27. december 2008 - 16:06 #4
Ville det også være nedladende at slå fast, du ikke forstår Sydossetisk? Naturligvis ikke ... det ville være at fastslå et faktum. Et problem bliver det først, hvis du i egen selvforståelse er bedre til Sydossetisk, end du i virkeligheden er.

"jeg holder mig hellere til den almindelige forklaring af begrebet" >> Måske, men hvormeget dén er værd afhænger jo helt af din opfattelse af, hvad der er 'den almindelige'.
Du har misforstået, hvordan Ajax bruges, og det har du udelukkende, fordi du insisterer på at lære webkodning de mest tvivlsomme steder. Det handler ikke bare om at bruge asynkron JavaScript og XML, men det får du ikke at vide, når du ønsker at lære af folk, der ikke selv ved, hvad de skriver om. Længere er den såmænd ikke.

Naturligvis har jeg set din kode! Ellers ville det jo være fuldstændig tåbeligt - og hamrende uforskammet - af mig at udtale mig om den. Det undrer mig dog ikke væsentligt, din paranoia overmander dig og får dig til at tro det modsatte - men det udsiger mere om dig selv!  ;o)

Det undrer mig, du som JavaScript programmør citterer amatørsites og derigennem forsøger at 'bevise', du ikke har erklæret globale variabler. Enhver JS'er ved, at lokale variabler skal deklareres med 'var'.
Der er faktisk organisationer, som vedligeholder vores standarder for webkodning. De har udmærkede websites om de pågældende standarder - og dét er stedet, hvor du får troværdige informationer.

I udgangspunktet burde du ikke være i tvivl, men du kan jo bare lave et par små test, hvis tvivlen skulle overmande dig - selvom manglen på tvivl faktisk synes at være dit allerstørste problem:

<script type="text/javascript">
function foo() {
    gnu = "dyr";
}
function bar() {
    alert(gnu);
}
foo();
bar();
</script>

<script type="text/javascript">
function foo() {
    var hest = "lokalt dyr";
}
function bar() {
    alert(hest);
}
foo();
bar();
</script>

Som du ser, tager du fejl ... også selvom du forsøger at råbe dine påstande ud med versaler!

Læg forøvrigt mærke til, at language-attributten i et script-tag har været deprecated i snart 10 år. Den har i alle årene siden været afløst af type-attributten - hvad enhver JavaScript programmør naturligvis bør vide.

Lidt mere åbenhed og mindre påståelighed ville uden tvivl kunne hjælpe dig med at lære. Måske kan du slet ikke, hvad du tror, du kan - og måske ved du slet ikke, hvad du tror, du ved.

Under alle omstændigheder bør du for din egen lægge din paranoia og offerrolle af dig og lære at blive glad, når nogen gider bruge deres fritid på at lære dig noget, du ikke ved/kan ... ikke mindst når der er tale om folk, som bruger enorme mængder tid på at trawle standarderne igennem og holde sig opdateret  ;o)
Avatar billede olebole Juniormester
27. december 2008 - 16:11 #5
"Under alle omstændigheder bør du for din egen lægge" --> "Under alle omstændigheder bør du for din egen skyld lægge"
Avatar billede sovetryne Nybegynder
27. december 2008 - 16:46 #6
Fint Olebole, du er nok guruen. På trods af min erfaring med programmering gennem 25 år er jeg en newbie. Alle mine kilder er selvfølgelig amatørsider, du ejer al kendskab til hvordan programmørverden hænger sammen.

Jeg siger ikke, at jeg ved alt, men AJAX er kun en lille del af "at programmere" - bare at du anvender en anden metode, gør det min metode ikke endnu dårligere. Men muligvis tager jeg fejl - hvis jeg gør, skal jeg som allerførste indrømme det. Indtil videre har du langt fra overbevist mig. Det handler ikke om fakta, det handler om at håndtere en metode.
Avatar billede olebole Juniormester
27. december 2008 - 18:14 #7
Læg nu den offerfrakke fra dig! Den er ganske uklædelig ... og grænser til det ufriviiligt komiske! Der er kun én, der kalder dig newbie - og det er ham, som burde kende dig bedst!
På den anden side gør du intet for at modbevise 'hans' tese. Kender man ikke til brugen af 'var' og/eller forskel på lokale og globale variabler, er man helt klart en newbie. At du skulle have 25 års erfaring med programmering lyder som en middelsvær overdrivelse ... med mindre du kalder det, du for tiden prøver med Ajax, for 'programmering'. Dét ville i hvertfald være en overdrivelse, der er til at få øje på!

*) Hvem af os to er det, der er nødt til at stille spørgsmål?
*) Hvorfor stiller du spørgsmål, når du alligevel ved bedre, end de, der besvarer dine spørgsmål?
*) Hvorfor stiller du spørgsmål, når du tydeligvis er for klog til at lære?
*) Hvor er det præcist, jeg tager fejl?

"Men muligvis tager jeg fejl - hvis jeg gør, skal jeg som allerførste indrømme det." >> Det kan jeg ikke få til at passe med din opførsel!

"Det handler ikke om fakta, det handler om at håndtere en metode." >> Jamen, du må bygge dit verdenssyn på, hvad somhelst. Programmører ved, de er nødt til at bygge deres på fakta, hvis de ikke skal dø af sult!

Du har et ualmindelig tyndt kendskab til JavaScript, så du kan formodentlig ikke overskue, din såkaldte metode ikke hænger sammen og 'forbryder' sig mod adskillige helt elementære grundregler.

Desværre er det ikke muligt at nå dig med alm. pædagogik, da du insisterer på at få hjælp til at få en elendig kodesovs til at fungere. Sålænge, du ikke vil høre på folk, der ved noget om JavaScript, har jeg ingen idé om, hvordan du får lært at bruge JavaScript - og brugbart Ajax.
Avatar billede olebole Juniormester
27. december 2008 - 18:22 #8
- og det er jo ikke min skyld, du i de forskellige tråde hele tiden henviser til amatørsider. Kendetegnende for en seriøs programmør er, at han naturligvis søger sine informationer de steder, hvor de enkelte standarder vedligeholdes.

En professionel automekaniker spørger heller ikke en aftenskolelærer i mekanik til råds om, hvordan han skal skifte kaburator på en Volvo  ;o)

"Alle mine kilder er selvfølgelig amatørsider" >> Det kan jeg ikke vide, men det er kun amatørsider, du indtil nu har henvist til!

"du ejer al kendskab til hvordan programmørverden hænger sammen" >> Man nok være renset for kendskab til programmørverdenen for at kunne drømme dén gang vrøvl sammen!
Avatar billede sovetryne Nybegynder
27. december 2008 - 22:18 #9
OK Olebole, du siger nu, at det er dig, der kender mig bedst:
"Der er kun én, der kalder dig newbie - og det er ham, som burde kende dig bedst!"
"Kender man ikke til brugen af 'var' og/eller forskel på lokale og globale variabler, er man helt klart en newbie."
Bare fordi man ikke kender til den ene ting betyder det ikke at man er en newbie. Da jeg ikke vidste at "var" gør forskel mellem global og local er IKKE ensbetydende med at jeg er en newbie, men du erklærer mig dermed til newbie. Altså kender du mig bedst? Du lider vist lidt af storhedsvanvid, tror jeg.

Ja, jeg har 25 års erfaring med programmering. Som 7-årig sad jeg og kodede på Commodore 128, og nej, det var IKKE Basic jeg kodede i.

Sig mig, stiller du ALDRIG spørgsmål, altså ejer du visdommen? Nej vel. At jeg stillede et spørgsmål eller to, betyder IKKE at jeg derfor ingenting ved.
Jeg stiller ikke spørgsmål fordi jeg ved det bedre end alle, men din pjat med at mit script var "tvært imod Ajax" er i hvert fald ikke sand. For det ER Ajax jeg bruger. Bare ikke din metode.
Jeg er ikke for klog til at lære, men jeg tager bare ikke al information for sand. Og det gør jeg tydeligvis klog i, fordi du har IKKE hjulpet mig. Du kom bare med nogle nedladende bemærkninger. Jeg må indrømme, at jeg efter din første besked havde en meget højere forventning af dine programmeringsevner end jeg har nu.
Hvor er det præcist du tager fejl? Du siger at mit script ikke er Ajax. Dét er fejlen, fordi jeg bruger netop Ajax. Bare ikke DIN metode. Og din fejl er, at du kun accepterer at ét svar kan være korrekte. Bare fordi 4+4 giver 8, betyder det ikke, at 6+2 IKKE giver 8.

Har jeg et UALMINDELIG TYNDT kendskab til Javascript? HAHAHAHAHAHAHAHA, og du er Julemanden? Du kan bare ikke have, at der er flere metoder.

Du må gerne forsøge med almindelig pædagogik, men hvis nedladende og højrøvede bemærkninger i din verden er "almindelig pædagogik", så er jeg glad for, at du ikke er pædagog, fordi du ville skræmme alle dine klienter væk.

Hey! "hvordan du får lært at bruge JavaScript" Jeg troede at jeg havde et ualmindeligt tyndt kendskab til Javascript? Eller modsiger du nu pludselig dig selv.

En professionel automekaniker kan godt diskutere med en aftenskolelærer i mekanik om hvordan man skifte en kaRburator på en Volvo - bare fordi manden er en aftenskolelærer, er ikke ensbetydende med at manden ved mindre end den professionelle automekaniker... Bare fordi man har lært et fag, betyder ikke at man er god til sit fag...

Sov godt, og drøm sødt om den store Olebole i Programmørernes land, hvor alle falder på knæ for dig.

Jeg er absolut ikke en guru, men det niveau du placerer mig er godt nok malplaceret.

Albert
Avatar billede sovetryne Nybegynder
27. december 2008 - 23:59 #10
Det hele virker nu fint. Det havde INTET at gøre med global eller local variables. Jeg bruger stadigvæk mit gamle script - så der var INTET i vejen med den. Ved du hvad problemet var? At scriptet stod OVENOVER formularen. Da jeg flyttede formularen til ovenover scriptet, var problemet løst. Om du nu tror at det jeg bruger er Ajax eller ej, du må selvom hvad du mener, jeg ved at jeg bruger Ajax og at det virker.

Mit næste problem er charset-vrøvlet, men jeg overvejer ikke om, hvis du skulle komme med kommentar, at kigge på din viden, indtil videre har du ikke overbevist mig om at du ved noget om troubleshooting.
Avatar billede keysersoze Guru
28. december 2008 - 00:37 #11
Et par hurtigere kommentarer fra en andens synspunkt - jeg kender ikke til scriptet der arbejdes med så kan ikke se hvor rigtigt/forkert det er, men fx undrer jeg mig over at man vælger at sende en tekst-string når nu AJAX netop er baseret på at skulle arbejde med XML og det virker også skævt at placeringen af et javascript i forhold til øvrigt kode har indflydelse da dette bør være ligegyldigt så længe det selvfølgelig er opbygget korrekt, kaldes korrekt og ikke har afhængigheder.

Det jeg dog kan se ud fra det link der er givet i dette spørgsmål er en - 25 års erfaring eller ej - forholdsvis ringe HTML-kode, hver der bla er glemt den mest elementære ting nemlig doctype. Hvis kilderne til javascript-lærdommen ligger på samme niveau som html-lærdommen er jeg derfor desværre nok tilbøjelig til at falde på knæ for olebole i hans programmør-land.
Avatar billede sovetryne Nybegynder
28. december 2008 - 00:49 #12
@Keysersoze
Avatar billede sovetryne Nybegynder
28. december 2008 - 00:52 #13
@keysersoze
Jeg har nu enabled password-protection på den pågældende side, så medmindre du kender mine credentials, kan du ikke se den side. Doctype'n er sat til, der hvor det er nødvendigt.
Avatar billede keysersoze Guru
28. december 2008 - 00:57 #14
doctype er _altid_ nødvendig - i hvert fald hvis man vil kunne fremvise korrekt html.
Avatar billede sovetryne Nybegynder
28. december 2008 - 01:24 #15
Det er jeg simpelthen ikke enig med dig, keysersoze. Når det er et website, som kun *jeg* bruger, så er det vel *mig* der bestemmer om doctype er nødvendigt eller ej. Jeg ved jo i forvejen hvordan mine data er formateret, og hvis det overholder standard-værdien på doctype (som IE antager), så er det IKKE nødvendigt. Men vi behøver ikke være enige. Som jeg skrev før: selvom man selv er vant til det ene, gør det ikke det andet *forkert*.
Avatar billede keysersoze Guru
28. december 2008 - 01:39 #16
Ved at mangle en doctype ikke alene laver man invalid kode i henhold til standarderne - man disabler fx også store dele af CSS, så det handler ikke om hvordan data er formateret i det viste resultat men ganske enkelt om at ens kode, udover altså at overholde standarderne, bliver tolket så ens som muligt i de fleste browsere.

Det er korrekt at fx strukturering af ens kode kan være et spørgsmål om hvad man er vant til eller ikke vant til - men at undlade at overholde standarderne for programmering _er_ forkert. En windows-applikation der ikke fulgte standarderne ville enten crashe eller slet ikke starte op - en web applikation er betydelig mere taknemmelig da browserne et lille stykke af vejen tager højde for folks manglende evner, men det gør det ikke mindre forkert at skippe standarderne.
Avatar billede sovetryne Nybegynder
28. december 2008 - 12:49 #17
Der hvor jeg bruger CSS, virker det fint. Endnu engang: hvis *jeg* laver en hjemmeside, som kun *jeg* skal bruge, så putter jeg ikke unødvendige HTML-tags i min kode. Nej, det er ikke standarden. Men det er til *eget brug*.
Når jeg afleverer en computer hos en kunde, så er den også lukket på siderne, alle skruer er sat i, Windows er korrekt installeret, virusscanneren er opdateret. Det er standard. Men min egen computer? Jeg aner ikke hvor siderne er henne, virusscanneren har jeg tilfældigvis i går opdateret, efter den har klaget over at den var udløbet i 2 måneder, grafikkortet er ikke skruet fast - og jeg er ligeglad. Hvis der er noget der ikke virker, så fikser jeg det. Det er alligevel eget brug. Min computer overholder ingen standard. Det må jeg vel selv om.

Skulle jeg aflevere en hjemmeside til nogen (så er det klart at jeg overholder standarderne. Men ikke til noget jeg kun bruger selv, der er jeg bedøvende ligeglad!
Avatar billede roenving Novice
28. december 2008 - 12:55 #18
-- og jeg kan kun tilslutte mig keysersozes bemærkninger, som jo bl.a. så også går på logind-siden, hvor der jo udover den manglende doctype også er brugt invalid css-kode ...
Avatar billede sovetryne Nybegynder
28. december 2008 - 13:05 #19
@roenving
Søde skat, som jeg nu har sagt to gange før: det er *mig*, altså Albert van Harten alias Sovetryne, der bruger det, og *ingen* i verden der ellers får adgang til det. DU kan alligevel ikke logge på. Så du kan være bedøvende ligeglad om der står doctype i koden eller ej. Er det nu så svært at forstå?????
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