[JS] Met PHP samengesteld Javascript gaat fout op localhost

Pagina: 1
Acties:

  • mr._Anderson
  • Registratie: Februari 2000
  • Niet online

mr._Anderson

[Een man is nog geen Tweaker]

Topicstarter
Wanneer ik mijn website in Internet Explorer via localhost/website benader dan krijg ik soms de error: "A runtime error has occurred. Do you wish to debug?" "Line: 18 Error: Object Expected"

Line 18 is de regel waar de <body> tag begint. Deze heeft een onload event waarbinnen een init(); functie wordt aangeroepen.
De init functie bevind zich in een javascript bestand welke samen met andere ingeladen wordt boven in de html code via een include.js

Dit include.js bestand wordt als PHP bestand uitgevoerd (net zoals alle andere .js bestanden) en ziet er alsvolgt uit:
PHP:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
<?php
    header("Content-type: text/javascript;");
    session_start();
    include( "./config.inc.php" );
    
    echo ( "\r\n" ); // om javascript code netjes onder elkaar te krijgen, heeft geen invloed op de fout
    include( "./init.js" );

    echo ( "\r\n" );
    include( "./file1.js" );

    echo ( "\r\n" );
    include( "./file2.js" );
?>


Deze constructie werkt opzichzelf goed (in ieder geval in FF en Opera). Probleem is dus de foutmelding die ik hierboven beschrijf.

In de body tag staat:
code:
1
<body onload="init();">

Wanneer ik in de init functie direct op de eerste plek een alert('foo'); geef, dan komt deze niet voor de foutmelding naar voren.

Wanneer ik de alert net voor de init(); geef op de volgende manier:
code:
1
<body onload="alert('foo');init();">

dan komt hij wel naar boven.

Dit wijst er dus op dat de fout toch in het samengestelde javascript bestand zit.

Na heel veel zoeken en proberen heb ik besloten session_start(); eens uit te zetten, en file2.js niet meer te includen (want daar heb ik sessions voor nodig).

Toen was het probleem compleet over!

Om eens te kijken of de goede gegevens wel in de session kwamen te staan besloot ik in file2.js voor de functie die de session variabelen gebruikt te kijken wat in de variabelen kwam te staan:
code:
1
2
alert('<?php echo( $_SESSION['var1'] ); ?>');
alert('<?php echo( $_SESSION['var2'] ); ?>');


Als ik dan kijk heb ik twee situaties:
1. Ik krijg de twee alerts waarin de juist gegevens afgebeeld worden, de andere error blijft uit en alles werkt naar behoren.
2. De error die ik hierboven beschreven heb komt naar voren, en de twee alerts worden NIET afgebeeld.

Online krijg ik deze bug voor zover ik weet niet.
Wanneer een vriend van me over internet op mijn eigen server kijkt, krijgt hij de bug ook nooit.
FF en Opera geven de bug zoiezo nooit.

Het include.js bestande wordt absoluut benaderd, een andere manier is niet mogelijk omdat ik gebruik maar van een centrale template welke voor alle url's gebruikt wordt...

Weet iemand hoe ik de session nog verder kan controleren?
Is dit meer een server probleem dan een coding probleem??

-=[Een wijs man zei eens: als een tweaker heb ik zo mijn TCP-IP connecties. Deze uitspraak staat tot op de dag van vandaag © mr._Anderson]=-=[ AMD64 overclock en registratie site: AMDGeeks.net


  • NMe
  • Registratie: Februari 2004
  • Laatst online: 11-03 14:33

NMe

Quia Ego Sic Dico.

Dit is een clientside probleem, en clientside problemen mogen in Webdesign, Markup & Clientside Scripting. Zie ook Waar hoort mijn topic?. :)

Het zou trouwens wel handig zijn als je de functie die foutloopt even laat kijken. ;)

PRG>>WEB

[ Voor 18% gewijzigd door NMe op 11-03-2006 18:24 ]

'E's fighting in there!' he stuttered, grabbing the captain's arm.
'All by himself?' said the captain.
'No, with everyone!' shouted Nobby, hopping from one foot to the other.


  • mr._Anderson
  • Registratie: Februari 2000
  • Niet online

mr._Anderson

[Een man is nog geen Tweaker]

Topicstarter
-NMe- schreef op zaterdag 11 maart 2006 @ 18:23:
Dit is een clientside probleem, en clientside problemen mogen in Webdesign, Markup & Clientside Scripting. Zie ook Waar hoort mijn topic?. :)

Het zou trouwens wel handig zijn als je de functie die foutloopt even laat kijken. ;)

PRG>>WEB
Je zou misschien zeggen dat het client side is, Ik echter steeds meer te vermoeden dat het serverside is.. een configuratie fout van de server? Ik kan het probleem namelijk niet oplossen met een oplossing in de code. Alleen door sessions uit te zetten.. iets wat door de server afgehandeld wordt...

Verder kan ik geen functie laten zien die fout loopt, want er lopen geen functies fout. Wanneer ik sessions bijv. uitzet, en statische waarden aan variabelen geef, gaat alles perfect...

[ Voor 10% gewijzigd door mr._Anderson op 11-03-2006 18:34 ]

-=[Een wijs man zei eens: als een tweaker heb ik zo mijn TCP-IP connecties. Deze uitspraak staat tot op de dag van vandaag © mr._Anderson]=-=[ AMD64 overclock en registratie site: AMDGeeks.net


  • Borizz
  • Registratie: Maart 2005
  • Laatst online: 02-01 15:55
We hebben waarschijnlijk meer aan de output van je script... aan dit script kunnen wij natuurlijk niet zien welke javascript code je inlaad en hoe je html code eruitziet.

If I can't fix it, it ain't broken.


  • mr._Anderson
  • Registratie: Februari 2000
  • Niet online

mr._Anderson

[Een man is nog geen Tweaker]

Topicstarter
Borizz schreef op zaterdag 11 maart 2006 @ 18:36:
We hebben waarschijnlijk meer aan de output van je script... aan dit script kunnen wij natuurlijk niet zien welke javascript code je inlaad en hoe je html code eruitziet.
Okidokie :) Bij onderstaande code krijg ik al de probemen waarover ik schrijf.

De html code:
code:
1
2
3
4
5
6
7
8
9
10
11
<?xml version="1.0" encoding="utf-8"?>
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.1//EN" "http://www.w3.org/TR/xhtml11/DTD/xhtml11.dtd">
<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" >
    <head>
        <meta tags: erg veel dus even wat ingekort... />
        <link rel="stylesheet" type="text/css" media="screen" href="http://localhost/website/general.css" />
        <link rel="shortcut icon" href="http://localhost/website/favicon.ico" type="image/x-icon" />
        <script type="text/javascript" src="http://localhost/website/library/js/include.js"></script>
    </head>

        <body onload="init();window.status='foo';">


include.js
code:
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
function init()
{
    if( document )
    {
        // find all external links and add target="_blank"
        var anchors = document.getElementsByTagName( 'a' );
        
        if (!anchors)
            return;
        
        // loop through all the anchors
        var i, anchor;
        for( i = 0; i < anchors.length; i++ )
        {
            anchor = anchors[i];
            
            // check if anchor has a href and rel attribute
            if( anchor.getAttribute('href') && anchor.getAttribute('rel') == 'external' )
            {
                anchor.target = "_blank";
            }
        }
    }

    // set the status
    //setStatus();
}


include.js PHP script:
PHP:
1
2
3
4
5
6
7
8
<?php
    header("Content-type: text/javascript;");
    session_start();
    include( "./config.inc.php" );
    
    echo ( "\r\n" );
    include( "./init.js" );
?>

-=[Een wijs man zei eens: als een tweaker heb ik zo mijn TCP-IP connecties. Deze uitspraak staat tot op de dag van vandaag © mr._Anderson]=-=[ AMD64 overclock en registratie site: AMDGeeks.net


  • crisp
  • Registratie: Februari 2000
  • Laatst online: 00:40

crisp

Devver

Pixelated

PHP:
1
header("Content-type: text/javascript;");

wat doet die puntkomma daar?
verder is de officiele mimetype application/x-javascript

Maar hoezo problemen met IE? die ondersteund XHTML sowieso niet, en XHTML 1.1 dient met een XHTML mimetype verstuurd te worden :P

Verder lijkt die init() functie me vrij statisch, dus zou ik 'm ook in een statische js-file zetten...
Sowieso zou ik altijd proberen om dynamisch gegenereerde JS- en CSS-files te vermijden, en vaak kan dat ook prima en het scheelt een hoop gehannes met caching issues (of eigenlijk non-caching issues waarbij elke keer weer de complete JS of CSS over de lijn moet).

[ Voor 43% gewijzigd door crisp op 12-03-2006 01:31 ]

Intentionally left blank


  • mr._Anderson
  • Registratie: Februari 2000
  • Niet online

mr._Anderson

[Een man is nog geen Tweaker]

Topicstarter
crisp schreef op zondag 12 maart 2006 @ 01:11:
PHP:
1
header("Content-type: text/javascript;");

wat doet die puntkomma daar?
verder is de officiele mimetype application/x-javascript

Maar hoezo problemen met IE? die ondersteund XHTML sowieso niet, en XHTML 1.1 dient met een XHTML mimetype verstuurd te worden :P

Verder lijkt die init() functie me vrij statisch, dus zou ik 'm ook in een statische js-file zetten...
Sowieso zou ik altijd proberen om dynamisch gegenereerde JS- en CSS-files te vermijden, en vaak kan dat ook prima en het scheelt een hoop gehannes met caching issues (of eigenlijk non-caching issues waarbij elke keer weer de complete JS of CSS over de lijn moet).
De puntkomma, zo programmeer ik eigenlijk altijd. Nooit problemen mee. application/x-javascript wist ik niet, eigenlijk nog nooit ergens gezien, je ziet over text/javascript (vooral bij inline script tags) zit daar verschil in?

Problemen met het XHTML gebeuren heb ik niet. Verder verstuur ik wel mimetypes mee voor de XHTML natuurlijk :) (voor zover ik weet doe ik dat goed)
Zoals je in de eerste post kan zien:
code:
1
2
3
<?xml version="1.0" encoding="utf-8"?>
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.1//EN" "http://www.w3.org/TR/xhtml11/DTD/xhtml11.dtd">
<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" >

Dat is toch voldoende?

De init is ook statisch, maar zelfs dan krijg ik al problemen. Daarmee wil ik aantonen dat het niet aan de javascript code zelf ligt.
Voor bepaalde code had en heb ik nu eenmaal dynamische gegevens nodig. Datgeen waar ik een sessie variabele voor nodig heb, heb ik nu maar inline gezet. Maar ik vraag me gewoon af waarom het de fout ingaat waneer ik met sessions ga werken...

-=[Een wijs man zei eens: als een tweaker heb ik zo mijn TCP-IP connecties. Deze uitspraak staat tot op de dag van vandaag © mr._Anderson]=-=[ AMD64 overclock en registratie site: AMDGeeks.net


  • crisp
  • Registratie: Februari 2000
  • Laatst online: 00:40

crisp

Devver

Pixelated

mimetype is heel iets anders dan een type-attribuut, xml-declaration, DTD of namespace declaration...

Intentionally left blank


Verwijderd

mr._Anderson schreef op zondag 12 maart 2006 @ 12:54:
[...]
Problemen met het XHTML gebeuren heb ik niet. Verder verstuur ik wel mimetypes mee voor de XHTML natuurlijk :) (voor zover ik weet doe ik dat goed)
lijkt me sterk, als je het goede mime type meegeeft (application/xhtml+xml), zal je zien dat IE het compleet niet slikt (tenzij je mathplayer hebt geinstalleerd, dan slikt ie het wel, maar wordt het alsnog als html behandeld)
crisp schreef op zondag 12 maart 2006 @ 13:02:
mimetype is heel iets anders dan een type-attribuut, xml-declaration, DTD of namespace declaration...
...of een content-type meta element

[ Voor 24% gewijzigd door Verwijderd op 12-03-2006 14:02 ]


  • mr._Anderson
  • Registratie: Februari 2000
  • Niet online

mr._Anderson

[Een man is nog geen Tweaker]

Topicstarter
Verwijderd schreef op zondag 12 maart 2006 @ 13:48:
[...]


lijkt me sterk, als je het goede mime type meegeeft (application/xhtml+xml), zal je zien dat IE het compleet niet slikt (tenzij je mathplayer hebt geinstalleerd, dan slikt ie het wel, maar wordt het alsnog als html behandeld)
[...]

...of een content-type meta element
Je hebt gelijk, ik gaf een andere mime-type mee.
code:
1
header("Content-type: text/html; charset=utf-8");

application/xhtml+xml dan werkt de website bijna helemaal goed in firefox. Maar IE biedt hem ten download aan...


EDIT:
Nu heb ik er netjes application/x-javascript van gemaakt. Maar nu geeft IE weer fouten, terwijl het met text/javascript allemaal "netjes" werkte.
Nu las ik net ergens dat application/x-javascript niet door IE wordt ondersteund, klopt dat?
Verder lijkt die init() functie me vrij statisch, dus zou ik 'm ook in een statische js-file zetten...
Sowieso zou ik altijd proberen om dynamisch gegenereerde JS- en CSS-files te vermijden, en vaak kan dat ook prima en het scheelt een hoop gehannes met caching issues (of eigenlijk non-caching issues waarbij elke keer weer de complete JS of CSS over de lijn moet).
Ik vermijd het ook zoveel mogelijk. CSS is statisch. Enja, JS is nu eenmaal dynamisch voor een deel. Dat ga ik denk ik ook voor een groter deel verplaatsen.
Voordeel van datgeen wat ik nu heb is dat je zelf verschillende niet al te grote JS file kan aanmaken en die toch als 1 bestand kan aanbieden, met dynamische variabelen... maar als dat niet nodig is heb je zeker gelijk.

[ Voor 46% gewijzigd door mr._Anderson op 12-03-2006 17:15 ]

-=[Een wijs man zei eens: als een tweaker heb ik zo mijn TCP-IP connecties. Deze uitspraak staat tot op de dag van vandaag © mr._Anderson]=-=[ AMD64 overclock en registratie site: AMDGeeks.net

Pagina: 1