2x Dell UP2716D | R9 7950X | 128GB RAM | 980 Pro 2TB x2 | RTX2070 Super
.oisyn: Windows is net zo slecht in commandline als Linux in GUI
Je zal het javascript gedeelte dus wel met PHP moeten echo'en naar de client.
Edit: En toen keek ik totaal om die ?> heen op regel 1. My bad.
[ Voor 13% gewijzigd door RaZ op 28-04-2012 23:18 ]
Ey!! Macarena \o/
(zo werkt mijn css ook, een .php file die ik php laat parsen en dan css-output. Zie wiethoofd's custom headerkleurtjes, doet dat ook)
edit:
ok
2x Dell UP2716D | R9 7950X | 128GB RAM | 980 Pro 2TB x2 | RTX2070 Super
.oisyn: Windows is net zo slecht in commandline als Linux in GUI
Oja:
Alles werkt gewoon zoals het hoort, behalve dat aanroepen... (ook vanuit index.php zelf)
[ Voor 18% gewijzigd door F.West98 op 28-04-2012 23:27 ]
2x Dell UP2716D | R9 7950X | 128GB RAM | 980 Pro 2TB x2 | RTX2070 Super
.oisyn: Windows is net zo slecht in commandline als Linux in GUI
In plaats van
1
2
3
4
| $(document).ready(init();); function init() { /*blablabla*/ } |
moet je
1
2
3
4
| $(document).ready(init); function init() { /*blablabla*/ } |
doen. Als ik jouw code run op jsFiddle werkt ie niet, de tweede manier werkt wel.
Nee hoor, de init werkt bij ready wel. Maar als ik hem daarna oproep vanuit extern file werkt ie niet...Struikrover schreef op zaterdag 28 april 2012 @ 23:28:
Je code is toch ook fout?
In plaats van
code:
1 2 3 4 $(document).ready(init();); function init() { /*blablabla*/ }
moet je
code:
1 2 3 4 $(document).ready(init); function init() { /*blablabla*/ }
doen. Als ik jouw code run op jsFiddle werkt ie niet, de tweede manier werkt wel.
Daar gaat ie ook niet fout
2x Dell UP2716D | R9 7950X | 128GB RAM | 980 Pro 2TB x2 | RTX2070 Super
.oisyn: Windows is net zo slecht in commandline als Linux in GUI
Jij voert de functie meteen uit i.p.v. deze mee te geven aan de ready callback, die ervoor bedoeld is om code pas uit te voeren wanneer het veilig is om de DOM tree v/d pagina te manipuleren. Dat het in jouw huidige geval werkt is slechts een gelukstreffer; de DOM tree is toevallig al gereed op het moment dat jouw script file klaar is met laden en kan gaan draaien.F.West98 schreef op zaterdag 28 april 2012 @ 23:29:
[...]
Nee hoor, de init werkt bij ready wel. Maar als ik hem daarna oproep vanuit extern file werkt ie niet...
Daar gaat ie ook niet fout
Dat hoeft echter (zeker met caching) niet het geval te zijn en als het dan verkeerd gaat kun je gelijk tegen lelijke issues aan lopen. Zo laten IE8 en lager bijvoorbeeld bij bepaalde manipulaties op een incomplete DOM tree een error dialog 'Operation aborted' zien en presenteren ze vervolgens alleen nog een placeholder pagina met een nietszeggende 'friendly error'.
dynjs.php:
1
2
3
4
| <?php session_start(); header('Content-type: application/x-javascript'); ?> function init() { alert("hoi"); } |
html file:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
| <html> <head> <title>test</title> <script type="text/javascript" src="http://code.jquery.com/jquery.min.js"></script> <script type="text/javascript" src="dynjs.php"></script> <script type="text/javascript"> $(document).ready(init); </script> </head> <body> Hoi </body> </html> |
De code staat wel onderaan de body, dus dat kan het zijn. Is dan zonder de (); de goede manier? Dan zal ik dat doenR4gnax schreef op zaterdag 28 april 2012 @ 23:37:
[...]
Jij voert de functie meteen uit i.p.v. deze mee te geven aan de ready callback, die ervoor bedoeld is om code pas uit te voeren wanneer het veilig is om de DOM tree v/d pagina te manipuleren. Dat het in jouw huidige geval werkt is slechts een gelukstreffer; de DOM tree is toevallig al gereed op het moment dat jouw script file klaar is met laden en kan gaan draaien.
Dat hoeft echter (zeker met caching) niet het geval te zijn en als het dan verkeerd gaat kun je gelijk tegen lelijke issues aan lopen. Zo laten IE8 en lager bijvoorbeeld bij bepaalde manipulaties op een incomplete DOM tree een error dialog 'Operation aborted' zien en presenteren ze vervolgens alleen nog een placeholder pagina met een nietszeggende 'friendly error'.
Helaas is het ready init niet het probleem, maar een losse call van init werkt niet.Struikrover schreef op zaterdag 28 april 2012 @ 23:38:
Probeer het eens op een hele simpele manier. Ik krijg het namelijk wel voor elkaar als ik deze code gebruik:
dynjs.php:
code:
1 2 3 4 <?php session_start(); header('Content-type: application/x-javascript'); ?> function init() { alert("hoi"); }
html file:
code:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 <html> <head> <title>test</title> <script type="text/javascript" src="http://code.jquery.com/jquery.min.js"></script> <script type="text/javascript" src="dynjs.php"></script> <script type="text/javascript"> $(document).ready(init); </script> </head> <body> Hoi </body> </html>
DUS DE INIT IN FILENAAM1.JS GAAT FOUT. Niet die in filenaam2.php
2x Dell UP2716D | R9 7950X | 128GB RAM | 980 Pro 2TB x2 | RTX2070 Super
.oisyn: Windows is net zo slecht in commandline als Linux in GUI
Is dit nu wat je wilt?
script.js:
1
2
3
4
| $(document).ready(function() { $('#knop').click(init); }); |
dynjs.php:
1
2
3
4
| <?php session_start(); header('Content-type: application/x-javascript'); ?> function init() { alert("kiekeboe"); } |
html:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
| <html> <head> <title> test </title> <script type="text/javascript" src="http://code.jquery.com/jquery.min.js"></script> <script type="text/javascript" src="dynjs.php"></script> <script type="text/javascript" src="script.js"></script> </head> <body> <input type="button" id="knop" value="klik" /> </body> </html> |
Dat wil ik, maar de functie werkt verder wel - de rest van de functie is 100 regels, samen met de externe functie. Dus de .click bevat nog veeeel meer code die wel werkt.Struikrover schreef op zondag 29 april 2012 @ 00:02:
Wat je in filenaam1.js doet, is een event handler registreren op een object dat op dat moment wellicht nog niet bestaat. Je moet het registreren van deze handler dus ook achter een $(document).ready() zetten.
Is dit nu wat je wilt?
script.js:
JavaScript:
1 2 3 4 $(document).ready(function() { $('#knop').click(init); });
dynjs.php:
JavaScript:
1 2 3 4 <?php session_start(); header('Content-type: application/x-javascript'); ?> function init() { alert("kiekeboe"); }
html:
HTML:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 <html> <head> <title> test </title> <script type="text/javascript" src="http://code.jquery.com/jquery.min.js"></script> <script type="text/javascript" src="dynjs.php"></script> <script type="text/javascript" src="script.js"></script> </head> <body> <input type="button" id="knop" value="klik" /> </body> </html>
In een statische js file krijg ik vage errors omdat er dingen missen, zet ik die erin werkt het gewoon WELCartman! schreef op zondag 29 april 2012 @ 12:11:
Je moet dus gewoon debuggen, prak de code uit je php file eens in een statische .js file en kijk wat ie dan doet. Als ie het dan ook niet doet kun je uitsluiten dat het aan php ligt. Pak Firebug erbij (of IE/Chrome devtools) en kijk wat de error is.
Firebug geeft error dat init(); niet bestaat, terwijl dat wel zo is omdat ie ergens anders wel kan worden aangeroepen.
Firebug herkent de .php dus niet als js
edit:
als .js met de php als comments doet hij NIETS meer en nog steeds herkent firebug m niet
edit2:
geconverteerd naar UTF-8 zonder BOM werkt de .php als .js wel
edit3:
werkend op UTF-8 zonder BOM.......
edit4:
oproepen werkt nog niet - function wordt niet uitgevoerd - rest van de aanroepfunction wel
[ Voor 6% gewijzigd door F.West98 op 29-04-2012 17:01 ]
2x Dell UP2716D | R9 7950X | 128GB RAM | 980 Pro 2TB x2 | RTX2070 Super
.oisyn: Windows is net zo slecht in commandline als Linux in GUI
Hoe kunnen die nu missen als je de output van de .php file gewoon opslaat?F.West98 schreef op zondag 29 april 2012 @ 16:44:
[...]
In een statische js file krijg ik vage errors omdat er dingen missen, zet ik die erin werkt het gewoon WEL
Blijkbaar zit je dan met een volgorde danwel scope probleem.Firebug geeft error dat init(); niet bestaat, terwijl dat wel zo is omdat ie ergens anders wel kan worden aangeroepen.
als comments? laat eens een voorbeeld zien? volgens mij klooi je maar gewoon iets aan.Firebug herkent de .php dus niet als js
edit:
als .js met de php als comments doet hij NIETS meer en nog steeds herkent firebug m niet
Zoals ik zei, waarschijnlijk een volgorde of scope probleem.edit2:
geconverteerd naar UTF-8 zonder BOM werkt de .php als .js wel
edit3:
werkend op UTF-8 zonder BOM.......
edit4:
oproepen werkt nog niet - function wordt niet uitgevoerd - rest van de aanroepfunction wel
Ik had de .php naar .js gedaan, en toen de php-delen ge-comment en dan vergeten gewone results er voor in de plaats te zetten -_-Cartman! schreef op maandag 30 april 2012 @ 09:55:
[...]
Hoe kunnen die nu missen als je de output van de .php file gewoon opslaat?
Dat weet ik heel zeker van niet. Want de volgorde van de scripts is goed. Eerst de .php met de function, daarna pas de .js die die function oproept. Praktijkvoorbeeld staat lokaal, om mijn IP hier nu te gaan posten... (en het werkt enkel na inlog)Zoals ik zei, waarschijnlijk een volgorde of scope probleem.
2x Dell UP2716D | R9 7950X | 128GB RAM | 980 Pro 2TB x2 | RTX2070 Super
.oisyn: Windows is net zo slecht in commandline als Linux in GUI
Dan kunnen we je helpen, en misschien lost het zich bij het opnieuw maken ook wel zelf op.
Wat nou als je een uitgeklede test case op http://jsfiddle.net/ zet?F.West98 schreef op maandag 30 april 2012 @ 16:04:
[...]
Dat weet ik heel zeker van niet. Want de volgorde van de scripts is goed. Eerst de .php met de function, daarna pas de .js die die function oproept. Praktijkvoorbeeld staat lokaal, om mijn IP hier nu te gaan posten... (en het werkt enkel na inlog)
Mijn testcase. Zou moeten werken maar werkt niet. De inhoud van test.php:
1
2
3
4
5
6
7
8
9
| <?php header('Content-type: application/x-javascript'); ?> function init() { $('body').addClass('js'); $('.edit').click(function() { alert('clicked edit'); } } $(document).ready(init); |
test.js:
1
2
3
4
5
6
| function animate(data) { var wrap = $('.wrap'); $(wrap).empty() $(wrap).append(data); init(); } |
In de testcase gaat alles met function init fout
2x Dell UP2716D | R9 7950X | 128GB RAM | 980 Pro 2TB x2 | RTX2070 Super
.oisyn: Windows is net zo slecht in commandline als Linux in GUI
Lees ook eens Programming FAQ - Algemeen - Tips bij debuggen door
De fout die erin zat was een snelheidfoutje, maar... In de echte versie zit die fout niet. Ik heb alles nog 10x doorgenomen, nee daar zit geen fout in...
aha... hij geeft inmiddels geen init fout meer, maar alles in init wordt simpelweg niet gerund...
edit:
de init zoals ik die nu run: opnieuw initialiseren (alle elementen in de DOM) hoeft niet, als ik de init in animate() weghaal werkt het nog steeds. is er toch iets anders...
update:
als ik handmatig init run werkt hij, hij wordt simpelweg niet opgeroepen (gaat de .js nog eens controleren)
de .js moet helemaal goed zijn, jslint geeft ook geen errors (behalve een var die opnieuw wordt geset, haal ik het weg is het out of scope, ja, zo kan ik ook wel wat onzin maken)
[ Voor 66% gewijzigd door F.West98 op 30-04-2012 22:12 ]
2x Dell UP2716D | R9 7950X | 128GB RAM | 980 Pro 2TB x2 | RTX2070 Super
.oisyn: Windows is net zo slecht in commandline als Linux in GUI
Het werkt dus wel met 2x een .js, dat is het probleem...Cartman! schreef op dinsdag 01 mei 2012 @ 11:55:
Je jsfiddle doet niks omdat de 2 files op je IP timeouten. Zet ergens een losse testcase neer die gewoon alleen werkt met statische files zoals ik eerder al zei. Niet renamen ofzo maar gewoon view-source op je .php file doen en die opslaan als .js. Je lijkt onze adviezen momenteel een beetje te negeren.
verder timeoutte hij omdat mijn server tijdelijk uitstond, nu weer aan...
Nieuwe link:
http://jsfiddle.net/3qqxs/11/
2x js:
http://jsfiddle.net/3qqxs/10/
Geen van beide runnen de init(); in de animate, maar ze staan er wel maar firebug geeft ze niet weer
[ Voor 14% gewijzigd door F.West98 op 01-05-2012 20:34 ]
2x Dell UP2716D | R9 7950X | 128GB RAM | 980 Pro 2TB x2 | RTX2070 Super
.oisyn: Windows is net zo slecht in commandline als Linux in GUI
Het is opgelost d.m.v. het gebruiken van de jQuery functie .live(handler, action) i.p.v. .click()
Even hier neergezet aangezien het mij een veelvoorkomend probleem lijkt....
2x Dell UP2716D | R9 7950X | 128GB RAM | 980 Pro 2TB x2 | RTX2070 Super
.oisyn: Windows is net zo slecht in commandline als Linux in GUI
Slecht advies. jQuery's live functie is al sinds 1.4.x deprecated. Die hoor je helemaal niet meer te gebruiken. In plaats daarvan hoor je de delegate functie te gebruiken of vanaf versie 1.7 de on functie.F.West98 schreef op vrijdag 18 mei 2012 @ 21:24:
Voor anderen die misschien ook tegen dit probleem aanlopen:
Het is opgelost d.m.v. het gebruiken van de jQuery functie .live(handler, action) i.p.v. .click()
Even hier neergezet aangezien het mij een veelvoorkomend probleem lijkt....
(Overigens gaan er ook plannen rond om alle shorthand event binders zoals de click functie te verwijderen uit jQuery core en enkel nog als plugin beschikbaar te stellen, dus deze gebruiken is ook niet slim.)
[ Voor 14% gewijzigd door R4gnax op 19-05-2012 18:42 ]
Inderdaad, die blijkt beter. (de on)R4gnax schreef op zaterdag 19 mei 2012 @ 18:40:
[...]
Slecht advies. jQuery's live functie is al sinds 1.4.x deprecated. Die hoor je helemaal niet meer te gebruiken. In plaats daarvan hoor je de delegate functie te gebruiken of vanaf versie 1.7 de on functie.
(Overigens gaan er ook plannen rond om alle shorthand event binders zoals de click functie te verwijderen uit jQuery core en enkel nog als plugin beschikbaar te stellen, dus deze gebruiken is ook niet slim.)
Toch niet... Hij werkt niet
[ Voor 4% gewijzigd door F.West98 op 19-05-2012 19:36 ]
2x Dell UP2716D | R9 7950X | 128GB RAM | 980 Pro 2TB x2 | RTX2070 Super
.oisyn: Windows is net zo slecht in commandline als Linux in GUI
$("a.offsite").live("click", function(){ alert("Goodbye!"); }); // jQuery 1.3+
$(document).on("click", "a.offsite", function(){ alert("Goodbye!"); }); // jQuery 1.7+
In ieder geval werkt het nu
2x Dell UP2716D | R9 7950X | 128GB RAM | 980 Pro 2TB x2 | RTX2070 Super
.oisyn: Windows is net zo slecht in commandline als Linux in GUI