27. maj 2006 - 21:38Der er
83 kommentarer og 2 løsninger
Syntaks fejl i eval()
Jeg evaluerer en kode (http://phpfi.com/120228), men får en syntaks fejl på linie 1 af den evaluerede kode(http://phpfi.com/120229), ligemeget hvad denne linie indeholder. Ved i hvad fejlen kan være?
var allOptions = new Array(); allOptions[0] = 'Alle'; allOptions[7] = 'BMX'; allOptions[5] = 'Road'; allOptions[6] = 'Shopper';
function changeBikeModels(newOptions) { var myEl = document.searchForm.bikeModel; eval(newOptions); createOpts(myEl, allOptions); }
function createOpts(nr1,nr2){ /* test script del - muligvis det oprindelige ukendte script der giver fejlen */ alert("myEl ... nr1 variablen fra input felt er:\n"+nr1); alert("allOptions ... nr2 array er:\n"+allOptions); } </script> </head>
Har kigget lidt på den... Har dog ikke sat mig ind i xmlhttprequest... Hvorfor FF advarer undrer jeg mig lidt over... Ligner problemer med eval af af responsetext ved ikke om det er fordi det skal escapes eller om det skal leveres med en bestemt xml mimetype... Kan ikke lige se løsningen - desværre... :/
det her er strengen olebole var allOptions = new Array(4); allOptions[0] = 'Alle'; allOptions[7] = 'BMX'; allOptions[5] = 'Road'; allOptions[6] = 'Shopper';
27/05-2006 22:15:40 , wicez kode er her ... gem siden rediger fetch.js : http_request.open('GET', '1.txt', true); og gem den streng jeg smed i 1.txt ...
Lokalt får jeg også fejl ved denne her (forsøger bare på at alert'e responsetext) ... tyder på at xml requesteren har lidt problemer med xml leveringen - ved ikke om det er fordi den skal leveres med xml mime type og det derfor ikke virker lokalt ???
Prøv at sætte ignoreWhitespace=true på dit XMLHttpRequest-objekt
Synes godt om
Slettet bruger
27. maj 2006 - 23:55#23
Fejlen betyder heller intet funktionsmæssigt, da scriptet virker som det skal i både Internet Explorer og Firefox. Jeg er alene ked af tanken om, at jeg har lavet et script der ikke kan valideres som værende korrekt ifølge de af w3.org angivne standarder. :)
det er xml requesteren der vist bugger som olebole nævner ... hvis jeg skifter fetch.js til min xml requester får jeg ingen problemer ... så det kan ikke være resultatet ... og nok heller ikke whitespaces da der kun var et "a" i min test...
Synes godt om
Slettet bruger
27. maj 2006 - 23:59#25
Jeg vil antage at det skal sættes sådan:
http_request.ignorewhitespace(true);
Men får en fejl kastet i hovedet om, at ignorewhitespace ikke er en funktion. Derfor prøvede jeg:
FF opfatter whitespace anderledes - både i HTML og XML - end IE gør. Derfor får du ingen fejl i IE.
Generelt har jeg erfaret, at med folks forskellige måder at encode på, m.m. er den sikreste måde at lave AJAX på, at sende et XML-dokument tilbage med et dokument-element, hvori strengen lægges CDATA-escaped.
Når browseren modtager, bruger du så dokument-elementets indhold, som du så kan eval'e
Synes godt om
Slettet bruger
28. maj 2006 - 00:04#30
Jeg har på fornemmelsen, at jeg udfører mit "AJAX" forkert, hvilket jeg naturligvis alene har gjort af uvidenhed, og ikke fordi jeg føler mig på et plan over andre :)
Hvis i vil uddybe lidt, hvordan jeg ellers vil kunne sende data fra php, som derefter bliver til indhold i mine select's, vil jeg være meget taknemmelig. Jeg har selv "bakset" det her sammen, så det er et produkt af min fantasi - ikke af en erfaren programmør.
Synes godt om
Slettet bruger
28. maj 2006 - 00:06#31
Jeg forstår godt systemet i xml, og finder det meget logisk og bekvemt, at man udskriver data som man gør. Det er mig derimod en gåde, hvordan jeg skal overføre det direkte til javascript og derfra til min sides indhold.
Nej, der er ikke mest korrekt - men blot et valg. Der er ikke nogen bestemt måde at lave AJAX på, der er 'mest korrekt'. Har du prøvet det, jeg skrev før?
Synes godt om
Slettet bruger
28. maj 2006 - 00:23#38
Jeg sidder og kæmper. Jeg får en xml-fejl.
Min nye javascript funktion:
function changeBikeModels(newOptions) { var myEl = document.searchForm.bikeModel;
- man skal ikke lære at svejse lodret-faldende ved at bygge en Storebælts bro ;o)
Synes godt om
Slettet bruger
28. maj 2006 - 00:32#45
Jeg tror du har ret. Jeg vil bestemt ikke skrotte projektet, men jeg bør nok kigge lidt på generel AJAX, før jeg går videre til det mere avancerede. Kan jeg prikke til dig i denne tråd, hvis jeg opretter nye spørgsmål ang. AJAX?
Og smid et svar tak, begge to. Så smider jeg naturligvis 30 point til jer hver for indsatsen (omend ikke meget, så et symbol for min tak :)).
Mail-systemet er ikke helt pålideligt for tiden, men du er altid velkommen til at prikke - så må vi se, om jeg opdager det. Gør jeg, skal jeg nok komme dig til hjælp. Det er bare lidt svært at tage AJAX helt fra Adam og Eva i en tråd som denne :)
Jeg mente naturligvis ikke 'droppe projektet' på dén måde. Kun i forbindelse med at lære AJAX ;o)
tak for point ... kom ikke rigtig til vejs ende med den xmlrequest test :/ - her var det punkt jeg nåede til ... men den er ikke komplet med error handling og om den kan håndtere xml texten kunne jeg ikke rigtig finde ud af :/
/* This function handles the data recieved */ function handleajaxreq(){ // Split the comma delimited response into an array results = datafetcher.responseText; eval(callback+results); }
/* Dont touch below unless you want to change the ajax handling */ var busystate=false; var datafetcher; if(window.ActiveXObject){ datafetcher=new ActiveXObject("Microsoft.XMLHTTP"); }else if(window.XMLHttpRequest){ datafetcher=new XMLHttpRequest(); }
var callback=""; var act="";
function makeHttpRequest(action, callback_function){ act=action;callback=callback_function; if(busystate==false){ ajaxgetdata(); } }
var oResp = XMLOBJ.responseXML; var docElm = oResp.documentElement; var sResp = docElm.getElementsByTagName("ajaxData")[0].firstChild.firstChild.responseText;
eval("var ajaxResp = " + sResp);
alert("returneret variabel =>" + ajaxResp.enVar); alert("returneret array =>" + ajaxResp.etArray);
Det er en effektiv måde at komme udenom de værste problemer på =)
[ Det er en effektiv måde at komme udenom de værste problemer på =) ] ... den gemmer jeg da lige så :) - hvis nu jeg vil rode med xmlrequest på et tidspunkt :)
JSON er en herlig måde at få returneret data på, da de direkte kan bruges i JS. Et database kald vil således kunne returnere et recordset, der ser sådan ud:
- og en ting, der afskrækker mange ved brugen af DOM, er, at man skal oprette alle de forbande elementer - formatere dem - og klistre dem ind. Her er et lille nordkaukasisk cowboy-trick:
Det kan naturligvis laves meget mere elegant, hvis man laver det OOP'et, men allerede på denne måde, er der tale om effektiv kode, der er tudelet at have med at gøre :)
Hvad angår AJAX, skal man dog holde sig en altid nærværende faldgrubbe for øje: For en mand med en ny hammer kommer alt til at ligne søm
AJAX er godt til mange ting, men ikke indhold, der er vigtigt i forhold til søgemaskiner. Ellers skal der under alle omstændigheder linkes til det, så disse kan finde informationerne - og der skal måske laves en JS-redirect til AJAX-udgaven, hvis en bruger havner på siden for søgemaskinerne via et link på Google. Det kan gøres, men bliver let omfattende - og svært at vedligeholde, hvis man ikke holder tungen lige :)
Desuden kan det være et problem i forhold til handicappede, som skal have mulighed for alternativ tilgang til vigtig information, valg, m.m.
Brugt fornuftigt er der dog ingen tvivl om, det er en teknik med store muligheder for at bedre brugervenlighed ..... og mindske serverload ;o)
Jeps dom bliver bedrer og bedrer med øvelse... (vigtigst er nok abstract tankegang ved størrer koder og overskuelighed af disse) og nogle gange kan man være ekstrem heldig og få noget bonus man ikke lige regnede med (i slutningen af tråden) ... i den nævnte tråd brugte jeg også clonenode scriptet der var lavet af roenving - men slutresultatet blev noget lidt andet :D
har også leget med at løbe lidt ... http://www.eksperten.dk/spm/697893 - øvelse, vidensforøgelse og belønning (typisk point) det må være grundpillerne her på Eksperten :)
[ Det kan gøres, men bliver let omfattende - og svært at vedligeholde, hvis man ikke holder tungen lige ] - jeps ... http://www.eksperten.dk/spm/711971 ... desværre - de kunne godt tage og sørge for at søgemaskiner lærte js :D (ved godt serverne at sikkert ville gå helt ned)
P.s.: Du har nu nogle gode måder at viderebringe budskaber på i dine artikler Olebole ... jeg har ikke læst så meget endnu ... men, toget kører fra startstationen til slutstationen ved gennemlæsning af artiklen :)
wicez >> det er zq os, der hijacker din tråd. Der gik vi nok over stregen ....... og vi gør det igen imorgen ;D
mclemens >> Tak - ja somme vil nok finde det lidt tumpet/infantilt med LillePer futtog und alles. Det er det nok også, men jeg tror, det virker :)
Programmering er ikke så abstrakt, som det umiddelbart kan synes. Det er - ikke mindst, hvis man arbejder med OOP (og JS er jo netop objekt-baseret) - en klon af vores måde at opfatte omverdenen på ...... som objekter med egenskaber og indbyggede metoder - eller evner, om du vil.
Tricket er, at få folk til at opdage det. Så kan programmering af en applikation og den måde, man oplever koden på, blive ligeså konkret som det at sætte sig op på en cykel og køre til bageren efter basser. I den forbindelse tror jeg på, analogier til manifestationer in real life, kan være en stor hjælp. Hvis de ovenikøbet er en smule sære/tumpede eller skiller sig ud på anden måde, er de faktisk lettere at huske.
I mine unge teenageår havde jeg altid svært ved at huske rækkefølgen i Ohm's Lov ... hvad skulle ganges med hvad for at give noget. Lige indtil en gammel radiomekaniker lærte mig "Ohm's Udvidede Lov": Spænding opstår, når man tager strøm på en pige, der yder modstand
Siden var der aldrig tvivl i mit sind - og jeg kan huske den små 40 år efter ;o)
[ Tak - ja somme vil nok finde det lidt tumpet/infantilt med LillePer futtog und alles. Det er det nok også, men jeg tror, det virker ... ] Det er jeg overbevist om at den gør ... det kunne nok ikke fortælles mere logisk ... det er nelig et fint tegn på en js funktion, kan forestille en "klon" af en del af en virkelighed, som du selv udtrykker det ... føler heller ikke programmering er speciel abstrakt når man kommer lidt ind i det :)
function BaseObject() { this.toString = function(){ if (this._className) return "[object "+this._className+"]"; return "[object Object]"; }; return this; }
function JSCollectionObject(clName) { this._oRXp = new RegExp("[^a-z0-9\.\:\{\}_-]+", "i"); this._className = (typeof clName!="string" || this._oRXp.test(clName)) ? "JSCollectionObject" : clName; this.prototype = new BaseObject; BaseObject.call(this); this._a = []; this.count = 0;
this.add = function(item, key, inx) { if (typeof key!="string" || this._oRXp.test(key)) { alert("Key is not set - or is of wrong type"); return false; } if (typeof inx=="number") this._a.splice(inx, 0, key); else this._a.push(key); this._a[key] = item; this.count++; }
this.item = function(inx) { if (typeof inx=="number") return this._a[ this._a[inx] ]; else if (typeof inx=="string" && !this._oRXp.test(inx)) return this._a[inx]; else { alert("Index or key is of wrong type"); return false; } }
this.remove = function(inx) { if (typeof inx=="number") { if (inx>=this.count) return alert("Out of bound"); delete this._a[ this._a[inx] ]; this._a.splice(inx, 1); this.count--; } else if (typeof inx=="string" && !this._oRXp.test(inx)) { if (!this._a[inx]) return alert("Key can't be found"); for (var i=0,j=this.count; i<j; i++) { if (this._a[i]==inx) this._a.splice(i, 1); } delete this._a[inx]; this.count--; } else { alert("Index or key is of wrong type"); return false; } }
var o = new JSCollectionObject("myTestObject"); alert(o);
var a = ["noget", "noget andet", "noget tredie"]; o.add(a, "myArray"); alert(o.item("myArray"); alert(o.count); alert(o.item(0);
- og bruger de egenskaber, du lige har siddet og læst om. Gå lidt på opdagelse i det og lær ;o)
Base-objektet bruger jeg, så objektet identificerer sig selv ved en evt. JS-fejl. Det bruger jeg efterfølgende til alle andre objekter i en given applikation og extend'er det af og til med yderligere properties/metoder - alt efter, hvad der måtte være behov for :)
Aldrig, kun lært html fra ældgammel bog i '99 - "Egen hjemmeside på 15 minutter" vist nok...
Og sidste år: - xhtml og css fra w3c. - php og mysql fra php 5 og start på mysql. - javascript fra bogen "Javascript 1.5" og i år: tilretning/forbedring fra roenving samt dig...
Ved ikke lige, hvad det scriptet kan bruges til, ud over holder til dokumentets/objektets funktioner, det er det selvfølgelig effektivt til. Det er nok godt til fejlfinding, som du nævner, om ikke andet kan jeg nok opbygge et eller andet ud fra skabelonen på et senere tidspunkt, når jeg får kigget scriptet igennem og har styr på prototype.
- Har aldrig helt følt at object holdere / constructors var mere effektive end arrays (sprang over det i php også - det virkede lidt forvirrende med klasser til det behov jeg havde)... kan dog godt se fordelen ved styleskiftet som vist i din artikel ... så tak for scriptet :)
Det med fejlfindingen gik nu kun på constructor'en, der hedder 'BaseObject' :)
Det, jeg selv bruger den til, er, når jeg f.eks. bygger specielle GUI-komponenter. Skal det gå seriøt for sig - og koden skal være robust - bør man kun bruge HTML'en til visuel præsentation og som 'håndtag'. Disse 'håndtag' sender så blot beskeder til applikationen bag og den abstakte struktur, der modsvarer GUI-komponenten. En typisk collection-struktur i en sådan GUI-komponent er select-elementets options-collection.
OOP er intet mindre end en gave til menneskeheden. I virkeligheden bruger du det hele tiden i JS - dog måske uden at vide det. JS er som sagt objekt-baseret og det betyder, at du hele tiden bruger JS' indbyggede objekter, deres properties og metoder. Hvergang du bruger: var a = new Array(); - eller: var im = new Image(); - bruger du object-constructors. Forskellen er bare, om 'forfatterne' af sproget har skrevet constructor'en - eller om du selv har :)
Ved ikke om det har betydning... Siden leveres som: text/html - Ved ikke om det hjælper ved levering som text/xml... <?php header("Content-type: text/xml"); ?>
... Jeg skal nok have leget lidt med det i aften (kan heller ikke forstå den ikke virker) - har også testet lidt lokalt og når til samme resultat som dig: XML objectet bliver ikke loadet ... indholdet er dog loadet hvis man bruger responseText - så det tyder på at IE har lidt problemer med parsing af filen. Tror (måske) det er problemet med content type - da det burde virke iflg.: http://developer.mozilla.org/en/docs/AJAX:Getting_Started :/
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.