Javascript IE werkt niet mee met code

Pagina: 1
Acties:
  • 990 views

Acties:
  • 0 Henk 'm!

Verwijderd

Topicstarter
Hallo, ik ben momenteel bezig mijn website te herschrijven, ik wil nu een script inbouwen dat via ajaj alles afhandelt. Dit werkt opzich prima en in safari en firefox werkt het. Echter is ie het probleem. Deze werkt niet me de code. Het gaat om hetvolgende:
http://easy-upload.nl?testmode
zie ook http://easy-upload.nl?testmodetweaktest

In de javascript code zit een loop die met intervals werkt. Deze werkt prima, zodra de taak compleet is moet deze stoppen en dit werkt allemaal goed onder safari en firefox en dus moet het goed zijn denk ik. ie werkt echter niet.

JavaScript:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
if(document.all)
document.getElementById('upload_frame').attachEvent('onload',function(){iframeFinished('')});
else
document.getElementById('upload_frame').addEventListener('load',function(){iframeFinished('')},false);

function iframeFinished(){
if (!document.all){
var resp = getFramecontent('upload_frame');
}else
var resp = getFramecontent('upload_frame');
}

function getFramecontent(frameid){
var iframe = document.getElementById(frameid);
var ddoc = iframe.document || iframe.contentDocument ||
iframe.contentWindow && iframe.contentWindow.document || null;  

if(document.all)
return(document.frames(frameid).document.body.innerText);
else
return ddoc.documentElement.textContent;
}
function domethefile() {
    $.get('progresstester.php?progress_key=<?php echo $key?>', function(data) {
      parsedata=jQuery.parseJSON(data);
      if(parsedata.total>52428800) {
          alert('Dit bestand is te groot, probeer een kleiner bestand.');
          $('#errormessage').html('Sorry, de maximale bestandsgroote is overschreden.');
          $('#guide, .uploadbutton, #ziparea').toggle();
          $('#errormessage').show();
          $('#loadsection').hide();
          $('#ziparea').show();
          visibleinput.show();
          clearInterval(run);
          stop();
      }
      $('#loading').animate({width : parsedata.current/parsedata.total*100+'%'}, 1000);
      $('#loadingcontainer').html(Math.round(parsedata.current/parsedata.total*100)+'%');
      if(parsedata.current/parsedata.total*100==100) {
        $('#fileresult').html("<table class=\"list\"></table>");
        uploadresult=jQuery.parseJSON(getFramecontent('upload_frame'));
        for(i=1; i<=10; i++) {
            if(uploadresult[i])
                if(uploadresult[i].errormessage=='FILESIZE') {
                    $('#errormessage').html('Sorry, de maximale bestandsgroote is overschreden.');
                    $('#guide, .uploadbutton, #ziparea').toggle();
                    $('#errormessage').show();
                    $('#loadsection').hide();
                    $('#ziparea').show();
                    visibleinput.show();
                }
                if(uploadresult[i].errormessage=='UNIQUE') {
                    $('#errormessage').html('Sorry, alle bestanden moeten uniek zijn.');
                    $('#guide, .uploadbutton, #ziparea').toggle();
                    $('#errormessage').show();
                    $('#loadsection').hide();
                    $('#ziparea').show();
                    visibleinput.show();
                }
                if(!uploadresult[i].errormessage) {
                    function isEven(num) {
                        return !(num % 2);
                    }
                    if(isEven(i))
                        var tint='notint';
                    else
                        var tint='tint';
                    $('#errormessage').hide();
                    $('#fileselection').hide();
                    $('#loadsection').hide();
                    $('#zipnamepointer').hide();
                    $('.texttoggle').hide();
                    if(uploadresult[i].image==true)
                        bbcodetextstring='Indien u deze afbeelding op een forum wilt gebruiken kunt u deze bb code gebruiken:<br /><input type="text" size="50" value="[img]http://easy-upload.nl/f/'+uploadresult[i].id+'[/img]" />';
                    else
                        bbcodetextstring='Indien u dit bestand op een forum wilt plaatsen kunt u deze bb code gebruiken:<br /><input type="text" size="50" value="[url=http://easy-upload.nl/f/'+uploadresult[i].id+']'+uploadresult[i].name+'[/url]" />';
                    $('#fileresult table').append('<tr class="'+tint+'"><td><a target="_blanc" href="http://www.facebook.com/sharer.php?u=http://easy-upload.nl/f/'+uploadresult[i].id+'"><img src="images/facebook.png" alt="deel dit op facebook" /></a><a target="_blanc" href="http://www.hyves.nl/hyvesconnect/smartbutton/?type=11&amp;title=http://easy-upload.nl/f/'+uploadresult[i].id+'&amp;body=Verstuurd via http://www.easy-upload.nl/&amp;category=10&amp;rating=5&amp;pageid=ABV0AUBMU3SOK80W4&amp;PHPSESSID=41269aed55763050f60c10e1fffdee7a"><img src="images/hyves.png" alt="deel dit op hyves" /></a><a target="_blanc"href="http://www.twitter.com?status=http://easy-upload.nl/f/'+uploadresult[i].id+'"><img src="images/twitter.png" alt="deel dit op twitter" /></a><a href="http://easy-upload.nl/f/'+uploadresult[i].id+'">'+uploadresult[i].name+'</a><br />Het bestand is succesvol geupload,<br/>u kunt het bestand via de volgende link downloaden:<input type="text" size="50" value="http://easy-upload.nl/f/'+uploadresult[i].id+'" /><br />'+bbcodetextstring+'</td></tr>');
                    
                }
          clearInterval(run);
          }   
      }
    })
}
var run;
var visibleinput;
$('.uploadbutton').click(
    function(){
        run=setInterval('domethefile()', 1000);
        visibleinput=$('input:file:visible')
        visibleinput.hide();
        $('#guide, .uploadbutton, #ziparea').toggle();
        $('#loading, #loadingcontainer').show();
        $('#errormessage').hide();
    }
);
$('#zipcheck').click(
    function(){
        $('#zipname, #zipnamepointer, .texttoggle').toggle();
    }
);

In ie draait alles fijn totdat een interval compleet is, daarna stoptie er spontaan mee. Bagger. Ik denk dat de code ergens vastloopt op een foutmelding maar ik krijg er niets uit. Debuggers vertellen ook niets nuttigs.

Ik zit al een tijdje te zoeken maar ik kom er echt niet uit, kunnen jullie mij misschien helpen dit probleem op te lossen? Dank u.

Acties:
  • 0 Henk 'm!

  • Bosmonster
  • Registratie: Juni 2001
  • Laatst online: 18-09 16:28
Waarom mix je legacy-code met document.all checks etc met jQuery?

Maak er trouwens even code=js van in je post, dan heb je ook syntax highlighting, nu is het een beetje lastig lezen.

[ Voor 48% gewijzigd door Bosmonster op 24-02-2010 13:57 ]


Acties:
  • 0 Henk 'm!

  • DanielG
  • Registratie: Oktober 2005
  • Laatst online: 08-09 15:36

DanielG

i = 0x5f3759df - (i>>1); ☠₧ℳ🀪❣

JavaScript:
1
2
3
4
5
6
function iframeFinished(){
if (!document.all){
var resp = getFramecontent('upload_frame');
}else
var resp = getFramecontent('upload_frame');
}


Is vrij nutteloos, dit ziet eruit alsof je ergens een script vandaan hebt en nu probeert aan te passen.

"Debuggers vertellen ook niets nuttigs." wat vertellen ze dan wel, misschien lijkt het niet nuttig maar kan het wel een zoekrichting geven.

Volgens mij zit er ook veel code in wat niets met je probleem te maken heeft, het is wel handig om het uit te kleden tot een klein testcase waar het probleem zich voordoet.

http://xyproblem.info/


Acties:
  • 0 Henk 'm!

Verwijderd

Topicstarter
DanielG schreef op woensdag 24 februari 2010 @ 15:26:
JavaScript:
1
2
3
4
5
6
function iframeFinished(){
if (!document.all){
var resp = getFramecontent('upload_frame');
}else
var resp = getFramecontent('upload_frame');
}


Is vrij nutteloos, dit ziet eruit alsof je ergens een script vandaan hebt en nu probeert aan te passen.

"Debuggers vertellen ook niets nuttigs." wat vertellen ze dan wel, misschien lijkt het niet nuttig maar kan het wel een zoekrichting geven.

Volgens mij zit er ook veel code in wat niets met je probleem te maken heeft, het is wel handig om het uit te kleden tot een klein testcase waar het probleem zich voordoet.
dat stukje code is idd oud wat eruit kon en dat heb ik inmiddels ook eruit gehaald. Nog steeds het probleem dat ik niet in ie het gewenste resultaat krijgt. De console zegt gewoon niets. Dus ik snap er niets van.

Acties:
  • 0 Henk 'm!

  • R4gnax
  • Registratie: Maart 2009
  • Laatst online: 06-09 17:51
Verwijderd schreef op woensdag 24 februari 2010 @ 16:37:

Nog steeds het probleem dat ik niet in ie het gewenste resultaat krijgt. De console zegt gewoon niets. Dus ik snap er niets van.
Een waarheid die staat als een huis: je snapt zo te zien inderdaad niet veel van javascript. ;)

Kijk maar eens naar regels 42 en 43 in je geciteerde code listing. Je maakt gebruik van een ongedefinieerde variabele i. Je loopt het array door alsof het 1-based indexing heeft, terwijl arrays in javascript 0-based indexing hebben.

De code onder je if statement in regel 43 heeft geen opening parenthesis, waardoor regel 52 altijd uploadresult[i].errormessage probeert op te halen, ook als uploadresult[i] niet bestaat. En ja; daar kunnen browsers wel eens errors op gaan geven. (Het soort waarvoor je zelfs geen debugger nodig hebt om ze te vinden, want deze verschijnen in je normale error console!)

Wellicht is IE wat vergevingsgezinder en interpreteert deze het resultaat v/d evaulatie van (null).errormessage gewoon als null, waarna de code door loopt en je altijd clearInterval(run) aandoet na 1 iteratie. En je setInterval functie stopt daarna natuurlijk netjes met uitvoeren.

Dat deze dus onder andere browsers niet stopt is niet omdat het in andere browsers goed werkt, maar omdat jouw script door een error in strictere browsers gewoon stopt voordat het script bij clearInterval(run) aankomt. Daarna tikt je interval vrolijk verder tot de functie opnieuw aangeroepen wordt en weer abort/crasht/exceptions gooit, etc.


Eigenlijk is het beste wat je kunt doen alles wat je hier geschreven hebt dumpen en niet meer opnieuw beginnen tot je geleerd hebt hoe javascript en jQuery werken. Maak eerst maar eens wat simpelere voorbeeldjes voordat je aan zoiets als dit begint, zou mijn advies zijn.

  • bindsa
  • Registratie: Juli 2009
  • Niet online
En als je toch JavaScript gebruikt op je site, haal dan die Flash applet eruit en maak daar ook JavaScript van, dan kunnen nog meer users je website juist bekijken.

Acties:
  • 0 Henk 'm!

Verwijderd

Topicstarter
Een waarheid die staat als een huis: je snapt zo te zien inderdaad niet veel van javascript. ;)
klopt deels
Kijk maar eens naar regels 42 en 43 in je geciteerde code listing. Je maakt gebruik van een ongedefinieerde variabele i. Je loopt het array door alsof het 1-based indexing heeft, terwijl arrays in javascript 0-based indexing hebben.
ga ik naar kijken, moet i perse gedefineerd worden dan? overigens begint ie bij i door de backend met reden maar dat kan aangepast worden.
De code onder je if statement in regel 43 heeft geen opening parenthesis, waardoor regel 52 altijd uploadresult[i].errormessage probeert op te halen, ook als uploadresult[i] niet bestaat. En ja; daar kunnen browsers wel eens errors op gaan geven. (Het soort waarvoor je zelfs geen debugger nodig hebt om ze te vinden, want deze verschijnen in je normale error console!)
Niet in de error console volgens mij maar goed ik zal er naar kijken.
Wellicht is IE wat vergevingsgezinder en interpreteert deze het resultaat v/d evaulatie van (null).errormessage gewoon als null, waarna de code door loopt en je altijd clearInterval(run) aandoet na 1 iteratie. En je setInterval functie stopt daarna natuurlijk netjes met uitvoeren.
zou kunnen ik ga er in ieder geval naar kijken
Dat deze dus onder andere browsers niet stopt is niet omdat het in andere browsers goed werkt, maar omdat jouw script door een error in strictere browsers gewoon stopt voordat het script bij clearInterval(run) aankomt. Daarna tikt je interval vrolijk verder tot de functie opnieuw aangeroepen wordt en weer abort/crasht/exceptions gooit, etc.
klinkt aannemelijk
Eigenlijk is het beste wat je kunt doen alles wat je hier geschreven hebt dumpen en niet meer opnieuw beginnen tot je geleerd hebt hoe javascript en jQuery werken. Maak eerst maar eens wat simpelere voorbeeldjes voordat je aan zoiets als dit begint, zou mijn advies zijn.
al meermalen geprobeerd te doen. maar zonder succes :| helaas ;(

Acties:
  • 0 Henk 'm!

Verwijderd

Topicstarter
Ik heb even een versimpelde testcase online gezet,Werkt ook niet, in safari doetie watie moet doen, laat simpel laadbalkje zien en zodra de fileupload klaar en gereed is gaat hij hoi zeggen. (en houd niet op). Dat is alles maar het moet het doen. In ie doetie dit al niet en gaatie zeuren om argumenten in jquery (maar at least in ieder geval heb ik iets). Ik weet niet waardoor de errror getriggerd wordt. maar misschien kunnen jullie me daarbij helpen? Mvg.

Acties:
  • 0 Henk 'm!

  • Manuel
  • Registratie: Maart 2008
  • Laatst online: 19-09 11:12
Ik heb eens even in je JavaScript gekeken en waarom denk je dat die alleen maar dat terugstuurt?

JavaScript:
1
2
3
4
5
$('.uploadbutton').click(
    function(){
        run=setInterval('domethefile()', 1000); //De boosdoener...
    }
);

Om de 1 seconde laat hij jouw alert('hoi'); zijn omdat status altijd 100 is. Verder heeft jQuery al een hele poos zelf ondersteuning voor JSON.

JavaScript:
1
2
3
$.getJSON('progresstester.php?progress_key=4b87e972f0d67', function(data) {
    return Math.round(data.current/data.total*100);
});


Als ik jou was zou ik als nog even in de jQuery docs duiken, dan zul je zien dat je het hier echt heel ranzig en slecht aanpakt.

[ Voor 0% gewijzigd door Manuel op 26-02-2010 16:27 . Reden: *changed $.get to $.getJSON ]


Acties:
  • 0 Henk 'm!

Verwijderd

Topicstarter
dat weet ik dat hij alleen maar hoi zegt via een alert melding, dat hoort ik dit is debug code namelijk. Dat stuk daarboven is ouden kan vervangen worden maar is volgens mij niet de boosdoener. Het probleem is dat ie niet werkt en dat het probleem, niet dat van hoi.

Acties:
  • 0 Henk 'm!

  • Manuel
  • Registratie: Maart 2008
  • Laatst online: 19-09 11:12
Nee oké, had dus even weer wat te snel gelezen. Heb nog even wat zitten verder te kijken en bij mij spaced IE hem ook als ik animate gebruik. Misschien is het een optie om dat even te verwijderen uit je testcase.

Maar zoals ik reeds eerder zei, herschrijf de gehele JavaScript code eens en duik in de jQuery documentatie. Aangezien dit niet de manier is om jQuery te gebruiken.

Acties:
  • 0 Henk 'm!

  • dwilmer
  • Registratie: Oktober 2008
  • Laatst online: 25-01 09:50
De 'hoi'-meldingen zijn heel erg irritant bij het debuggen. Ik weet niet of dat het probleem is, maar ik zie in het testscript nergens dat je de interval stopzet (zit wil in het originele script, ergens...)

Wat nu de fout precies is, snap ik eigenlijk niet. Wat moet er gebeuren maar gebeurt er niet? met 'Het werkt niet' komt niemand verder, als we niet weten wat er zou moeten gebeuren.

Acties:
  • 0 Henk 'm!

Verwijderd

Topicstarter
ik heb de code inmiddels ingekort maar nog steeds het probleem kan iemand mij helpen? ie crasht op de code safari doet het goed het kan dit?

Acties:
  • 0 Henk 'm!

Verwijderd

Topicstarter
Ik heb de code nog verder simpel gemaakt bekijk de pagina in safari of firefox en zie hoe een simpele gebeurtenis gebeurt en een hoi melding verschijnt. op ie doetie niks. dit is alle code:
code:
1
2
3
4
5
6
7
8
9
10
11
12
13
<script type="text/javascript">
function domethefile() {
    //getstatus();
    status=100
    if(status==100) {
        $('#loadingcontainer').html(status)
        clearTimeout(run)
        alert('hoi')
    }
    else {
    }
}
</script>

Actie uitgevoerd door:
code:
1
<input type="submit" value="upload" class="uploadbutton" onclick="run=setInterval('domethefile()', 1000)" />

in form (door te klikken op knop)
Te bezoeken op http://easy-upload.nl?testmodetweaktest

[ Voor 4% gewijzigd door Verwijderd op 04-03-2010 18:06 ]


Acties:
  • 0 Henk 'm!

  • crisp
  • Registratie: Februari 2000
  • Nu online

crisp

Devver

Pixelated

clearTimeout moet natuurlijk clearInterval zijn...

Intentionally left blank


Acties:
  • 0 Henk 'm!

  • Manuel
  • Registratie: Maart 2008
  • Laatst online: 19-09 11:12
En natuurlijk moet run ook globaal worden gedefinieerd anders werkt het als nog niet :)

Acties:
  • 0 Henk 'm!

Verwijderd

Topicstarter
Manuel schreef op donderdag 04 maart 2010 @ 18:12:
En natuurlijk moet run ook globaal worden gedefinieerd anders werkt het als nog niet :)
bedankt voor de hulp maar dit werkt niet, de clearinterval die is geset voor de interval run werkt niet meer als run globaal is gedefined mits en als ik ik dat goed heb (var run= setInterval('domethefile()', 1000) ik heb de code geupdate en werkt nog steeds niet als je zou willen kijken :*) ?

Acties:
  • 0 Henk 'm!

  • Bosmonster
  • Registratie: Juni 2001
  • Laatst online: 18-09 16:28
Met var definieer je hem juist _niet_ globaal, maar binnen de huidige scope. Daarmee overschrijf je de variabele 'run' van een bredere scope.

Dit doet mij ook concluderen dat je bovenstaande script helemaal niet zelf geschreven hebt en maar probeert dit in je website te krijgen zonder enige javascript kennis en hiervoor ons maar op laat draven.

[ Voor 42% gewijzigd door Bosmonster op 08-03-2010 10:27 ]


Acties:
  • 0 Henk 'm!

Verwijderd

Topicstarter
Bosmonster schreef op maandag 08 maart 2010 @ 10:23:
Met var definieer je hem juist _niet_ globaal, maar binnen de huidige scope. Daarmee overschrijf je de variabele 'run' van een bredere scope.

Dit doet mij ook concluderen dat je bovenstaande script helemaal niet zelf geschreven hebt en maar probeert dit in je website te krijgen zonder enige javascript kennis en hiervoor ons maar op laat draven.
ik heb het toch echt wel zelf geschreven in ben alleen niet zon expert in javascript, ik doe mn zoekwerk maar laat me dan ook even wat fouten maken en probeer me te helpen.

*ik steel geen code zonder toestemming en of vermelding

Acties:
  • 0 Henk 'm!

Verwijderd

Topicstarter
iemand?

Acties:
  • 0 Henk 'm!

  • Manuel
  • Registratie: Maart 2008
  • Laatst online: 19-09 11:12
Als je nou eens iets doet zoals wij zeggen door run in ieder geval al globaal te declareren en niet per onclick. Doe het dan per een javascript framework door bijvoorbeeld:
JavaScript:
1
2
3
$("input.uploadbutton:submit").click(function() {
        //Start / end interval?
});

Want met wat je nu hebt wordt het simpelweg niets. Verder haal die alert('hoi'); eens weg.. Dit debugged als niets.

Acties:
  • 0 Henk 'm!

Verwijderd

Topicstarter
Om er nog maar even op terug te komen het is nog steeds niet opgelost, en heb de hoi eruit gehaald. zou nog iemand kunnen kijken naar http://easy-upload.nl/?testmodetweaktest?

Acties:
  • 0 Henk 'm!

  • MueR
  • Registratie: Januari 2004
  • Laatst online: 22:52

MueR

Admin Tweakers Discord

is niet lief

Nee. Open even een nieuw topic met een duidelijke herformulering van het probleem. Nu moet men een aantal oude posts bij elkaar gaan combineren om tot de huidige code te komen.

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

Pagina: 1

Dit topic is gesloten.