[jQuery] IE bug met slideshow

Pagina: 1
Acties:

Acties:
  • 0 Henk 'm!

  • DAMAGE
  • Registratie: December 2001
  • Laatst online: 04-09 16:49

DAMAGE

a.k.a. Rice_NL

Topicstarter
Hallo mensen,

Ik ben vandaag de hele dag bezig geweest met een bug uit een stukje javascript te halen. Het probleem is namelijk dat het script onder mozilla, safari etc gewoon prima werkt. Onder Internet Explorer beginnen de problemen echter. Ik ben natuurlijk op onderzoek uit gegaan en heb veel gelezen over dit probleem, maar ik kan er maar niet uit komen. Het is echter wel een veel voorkomend probleem. Ik zal eerst de code eens posten:

*doe maar niet*

Dat is het stukje javascript wat ik gebruik. Het maakt zoals je ziet gebruik van jQuery. De fout begint op regel 80. De fout is namelijk:

'id' is null or not an object

Een foutmelding die jullie ongetwijfeld vaak voorbij hebben zien komen. 'id' is dus gewoon niet gedefineerd volgens IE.

Zoals je ziet is regel 80 de volgende line:

code:
1
alert(d[i].id)


Dat heb ik zelf gedaan, omdat ik wilde kijken waarom ik de melding krijg dat hij "null" is of geen object, maar het gekke is dat ik wel gewoon netjes de waardes terug krijg in de alert box.

Wat gaat hier fout? Ik lijk toch even vast te zitten dus hopelijk weet een van jullie het... Alvast mijn grote dank voor het mee denken :)

[ Voor 68% gewijzigd door MueR op 15-07-2010 20:54 ]

Lian Li O11 Dynamic EVO | Corsair HX1500i | Intel i9 13900K | ASUS Maximus HERO Z790 | 32GB GSkill Trident Z5 7200 DDR5 | Samsung 980 Pro 2TB | RTX 4080 | Simucube 2 Pro wheel


Acties:
  • 0 Henk 'm!

  • Caelorum
  • Registratie: April 2005
  • Laatst online: 08:19
je mist volgens mij een ; op lijn 79.

Acties:
  • 0 Henk 'm!

  • DAMAGE
  • Registratie: December 2001
  • Laatst online: 04-09 16:49

DAMAGE

a.k.a. Rice_NL

Topicstarter
Thanks, scherp, Ik heb hem toegevoegd, maar dat is niet het probleem iig :) Als ik de alert box weg haal dan zit het probleem op regel die er na komt, waarin ik die zelfde waarde aanroep. 'id' is volgens de melding leeg, of is geen object. Maar hoe kan het dan dat als ik de waarde in een alertbox laat dumpen ik gewoon netjes de waardes op mijn scherm krijg?

Lian Li O11 Dynamic EVO | Corsair HX1500i | Intel i9 13900K | ASUS Maximus HERO Z790 | 32GB GSkill Trident Z5 7200 DDR5 | Samsung 980 Pro 2TB | RTX 4080 | Simucube 2 Pro wheel


Acties:
  • 0 Henk 'm!

  • MueR
  • Registratie: Januari 2004
  • Laatst online: 00:31

MueR

Admin Tweakers Discord

is niet lief

Even die 180 regels code gestript. We zien graag alleen de relevante stukken code.

Anyone who gets in between me and my morning coffee should be insecure.


Acties:
  • 0 Henk 'm!

  • DAMAGE
  • Registratie: December 2001
  • Laatst online: 04-09 16:49

DAMAGE

a.k.a. Rice_NL

Topicstarter
Alleen nu kan ik me voorstellen dat men niet er achter kan komen waarom die foutmelding gegeven word. Daarom had ik ook die hele lap code er neer gezet zo dat men kan zien hoe die code opgebouwd is, en dat er een for loop gedaan word, waar vervolgens variables uit gebruikt worden op basis van een count.

Wat opvallend is dat in IE die count op 5 uit komt, en in mozilla etc komt die op 4 uit, zoals het hoort, want er zijn ook maar 4 items.

Lian Li O11 Dynamic EVO | Corsair HX1500i | Intel i9 13900K | ASUS Maximus HERO Z790 | 32GB GSkill Trident Z5 7200 DDR5 | Samsung 980 Pro 2TB | RTX 4080 | Simucube 2 Pro wheel


Acties:
  • 0 Henk 'm!

  • RobIII
  • Registratie: December 2001
  • Niet online

RobIII

Admin Devschuur®

^ Romeinse Ⅲ ja!

(overleden)
DAMAGE schreef op donderdag 15 juli 2010 @ 21:58:
Alleen nu kan ik me voorstellen dat men niet er achter kan komen waarom die foutmelding gegeven word.
Het is dan ook de bedoeling dat jij er achter komt. En daarom vragen we om relevante stukken code. En er is no way in hell dat alle 180 regels relevant zijn (en dan heb ik ze nog niet eens gezien) voor je probleem. Debuggen mag je zelf doen ;) Debuggen: Hoe doe ik dat? En bij debuggen hoort in de eerste plaats het lokaliseren van je probleem.

There are only two hard problems in distributed systems: 2. Exactly-once delivery 1. Guaranteed order of messages 2. Exactly-once delivery.

Je eigen tweaker.me redirect

Over mij


Acties:
  • 0 Henk 'm!

  • DAMAGE
  • Registratie: December 2001
  • Laatst online: 04-09 16:49

DAMAGE

a.k.a. Rice_NL

Topicstarter
Sorry jongens, ik begrijp dat er tegenwoordig een boel mensen hier komen code droppen en verwachten dat een ander het wel voor ze oplost. Maar zo ben ik niet. Ik kom al jaren op GoT maar zo streng als dit heb ik het nog nooit mee gemaakt, NOFI. Ik wil zelf ook graag wijzer worden dus als ik het zelf kan oplossen zou ik dit natuurlijk altijd doen :)

Ik ben de hele dag al bezig met zoeken waarom IE zo buggy doet. De code die er nu alleen nog staat is totaal niet relevant, want ik weet inmiddels wel dat de reden dat ik daar de waarde wél te zien krijg, in de alert dus, is omdat dat DOM is. De loop op zich gebeurd als de hele pagina nog niet gerenderd is. Dus in principe kan internet explorer het daarom niet lezen en ziet het als NULL. Probleem dus gelokaliseerd.

Mozilla kan het wel lezen omdat die een mooie, betere Gecko engine heeft. Die heeft daar een paar "trucjes" voor om het toch te laten werken. Hoe dat precies zit weet ik niet, en is niet relevant.

Nu moet ik het probleem echter nog oplossen. Aangezien ik hier al zo lang mee bezig ben, dacht ik misschien dat hier iemand dit probleem herkent. Het script zou je ook in de body kunnen laden zag ik ergens. Dat ga ik maar eens proberen.

Lian Li O11 Dynamic EVO | Corsair HX1500i | Intel i9 13900K | ASUS Maximus HERO Z790 | 32GB GSkill Trident Z5 7200 DDR5 | Samsung 980 Pro 2TB | RTX 4080 | Simucube 2 Pro wheel


Acties:
  • 0 Henk 'm!

  • Bosmonster
  • Registratie: Juni 2001
  • Laatst online: 10-09 08:45

Bosmonster

*zucht*

De loop op zich gebeurd als de hele pagina nog niet gerenderd is. Dus in principe kan internet explorer het daarom niet lezen en ziet het als NULL. Probleem dus gelokaliseerd.
Je gebruikt jQuery. Gebruik het documentready event.

Kan verder je relevante code niet zien, dus blijft een beetje koffiedik kijken :+

[ Voor 72% gewijzigd door Bosmonster op 15-07-2010 23:53 ]


Acties:
  • 0 Henk 'm!

  • DAMAGE
  • Registratie: December 2001
  • Laatst online: 04-09 16:49

DAMAGE

a.k.a. Rice_NL

Topicstarter
Heb het al opgelost jongens! Beetje een hele stomme fout van mij ook... Na veel debug werk zag ik het eindelijk!

Ik heb een script geschreven in php waarmee de eigenaar bestanden kan uploaden, plaatjes die in de slideshow moeten komen. Daarna laat ik het script door de database heen browsen, de tabel waar de plaatjes in opgeslagen staan zeg maar. Vervolgens gaat een ander script hier de code rondom opbouwen zo dat de eigenaar van de site niet zelf hoeft te coden om te slideshow aan te passen. Dit word dus voor hem gedaan en is dus lekker gebruiksvriendelijk.

Maar! Omdat ik dit ook met een while loop doe in PHP, en zo doende het dus weer opgeslagen word in de DB kwam de code er alsvolgd uit te zien:

code:
1
2
3
4
{"id":"slide-img-1","client":"","desc":""},
{"id":"slide-img-2","client":"","desc":""},
{"id":"slide-img-3","client":"","desc":""},
{"id":"slide-img-4","client":"","desc":""},


Dit is maar een deel van de code ;) maar als je goed opmerkt zie je de laatste regel weer een , comma staan. Mozilla maakt hier geen probleem van, en leest de volgende regel gewoon niet omdat die null is. Internet Explorer leest echter wel een nieuwe regel, maar die bestaat niet! Dus fout... Bam, crash. Stom van mij dus om dat over het hoofd te zien!

Wat heb ik nu gedaan, ik heb van de mysql query num_rows gepakt, en in de whileloop in PHP word de laatste row gewoon de comma weg gelaten zodat het script afgesloten word zoals het hoort. Probleem opgelost. Werkend in beide browsers en geen javascript errors meer...

Lian Li O11 Dynamic EVO | Corsair HX1500i | Intel i9 13900K | ASUS Maximus HERO Z790 | 32GB GSkill Trident Z5 7200 DDR5 | Samsung 980 Pro 2TB | RTX 4080 | Simucube 2 Pro wheel


Acties:
  • 0 Henk 'm!

  • pieturp
  • Registratie: April 2004
  • Laatst online: 27-08 14:18

pieturp

gaffa!

Zo zie je maar: debuggen loont ;)

Wil je overigens dit soort problemen voorkomen, gebruik dan iets als JSLint. IMHO vaak iets té strikt, maar zeker verhelderend!

... en etcetera en zo


Acties:
  • 0 Henk 'm!

  • kwaakvaak_v2
  • Registratie: Juni 2009
  • Laatst online: 02-06 12:29
of je bouwt je array gewoon in php op, en gebruikt de json_encode functie, ipv strings aan elkaar te plakken. (gokje... aangezien die laatste , fout) ;)

Driving a cadillac in a fool's parade.

Pagina: 1