Geek tričko zdarma Python týden
Tričko zdarma! Stačí před dobitím bodů použít kód TRIKO15. Více informací zde
Pouze tento sleva až 80% na kurzy Python

Diskuze: nastavení jazykové mutace a promítnutí do javascriptu

Aktivity (2)
Avatar
David Šabacký:13. března 10:08

Ahoj,

v header.php mám:

...
<script>
                $.getJSON( 'json/settings.json?'  + new Date().getTime(), function(data, value) {
                        var temp = data['Language'];


                        $('#menu_top').append('<input type="hidden" name="lang" value="' + temp + '"> </input>');
                        var jaz = $('input[name=lang]').val();
                        var imported = document.createElement('script');
                        imported.src = './json/' + jaz + '.js';
                        document.head.appendChild(imported);

                        console.log('header-' + jaz);

                });

        </script>
...

Cílem je, aby vznikl input v HTML a natáhla se správná jazyková mutace. Následně již v dalších scriptech používám, např.

...
$('#menu').append('<a href="javascript:users()" "><span>' + lang.profile.profile + ' </span></a>');
...

Toto mi funguje, ale pokus zavolám první javascript z setting.php (které obsahuje i include header.php):

<script type="text/javascript" src="js/users.js"></script>

...
<body onload="users();">
....

Pak mi jazyková mutace nefunguje, pouze pokud udělám reload stránky s F5, pak mi to chodí.
Dokonce, když do users.js dám

...
var jaz = $('input[name=lang]').val();
console.log(jaz);
...

Tak je jaz pro něj undefined.

Nevíte někdo, kde by mohla být chyba?

Díky

David

 
Odpovědět 13. března 10:08
Avatar
Peter Mlich
Člen
Avatar
Peter Mlich:13. března 15:22

Vytvor jednoduchou stranku a dej link nebo poskytni kod vseho, co je k tomu nutne, aby si to clovek mohl rozchodit na svem pc.
Takhle jenom muzu rici: Eeee? Co ze to chce? :)

Muzu ti vyjmenovat asi 100 pricin, co je mozna spatne. A stejne muze bych cyba v dalsich 10.000 jinych moznosti.

Mozna by ti stacilo veskery js presunout pred /body. A nedavat to do head. To zpusobuje celou radu problemu, novackum.
Kdyz element neexistuje, tak js v head spusteny pred vygenerovanim elementu nejede, logicky. Proto se pouziva window.onload=mo­jefunkce; nebo body onload="mojefun­kce()".

<?php ...php kod... ?>
<head>...</head>
<body>
... html kod ...
  <script src=...></script>
  <script>alert(123)</script>
</body>

A nepotrebujes tam ani body onload, ani window.onload, ani jquery document.ready.
A u php zase naopak, vyresit pred zobrazenim stranky

Editováno 13. března 15:24
 
Nahoru Odpovědět 13. března 15:22
Avatar
Odpovídá na Peter Mlich
David Šabacký:13. března 17:23

Ahoj,

jestli by ti to nevadilo, vystavil jsem to venku na db.blueto.cz/evy, Martin/qwe. Problém je setting.php, tedy po kliku na ozubené kolečko.

Moc díky

David

 
Nahoru Odpovědět 13. března 17:23
Avatar
Peter Mlich
Člen
Avatar
Peter Mlich:14. března 7:39

Nejaky pip ti zakazal prave tlacitko, takze se dost obtizne dostava ke zdrojovemu kodu.

 
Nahoru Odpovědět 14. března 7:39
Avatar
Peter Mlich
Člen
Avatar
Peter Mlich:14. března 8:14
  1. Je dost obtizne se nalogovat. Login screen kazdou chvili spadne s hlaskou Chyba spojeni.
  2. http://db.blueto.cz/…settings.php

Html kod nemas validni. Coz muze v pripade js zpusobovat celou radu problemu
Napr tam mas 2x body, coz by nevadilo, kdyby jsi to chtel zamerne a vyuzival. Ale nejspis je to chyba.
Nebo se ti tam krizi tagy.

<script type="text/javascript" src="./js/jquery.min.js"></script>
        <script                              src="./js/jquery.min.js"></script> take dost divne, ze?

3. js konzola mi hlasi chybu pri kliknuti na setting (FF - nastroje - nastroje pro vyvojare - konzola) a samozrejme, jak pises, 'jaz' nic nezobrazuje do konzoly.

4.

<input type="hidden" name="lang" value="' + temp + '"> </input>

Takhle se preci input nezapisuje, ne? Input je single tag. Na jpw oznacovany jako neparovy https://www.jakpsatweb.cz/…rmulare.html#…

Podle mne mas spatne celou tu ajax funkci... Provedeme jednoduchy test... (To jsem po tobe chtel)

--- http://localhost/x/eve/js-eve.htm ---
<div id="menu_top"></div>
<script src="http://db.blueto.cz/evy/js/jquery.min.js"></script>
<script>
//url = 'http://db.blueto.cz/evy/json/settings.json';
url = 'js-eve-json.txt';        // http://localhost/x/eve/js-eve-json.txt
$.getJSON(url, function(data, value)
        {
        //alert(data.toSource());       // vypise ({auth:"yes", Depth:"ft", Speed:"kn", Distance:"nm", Language:"Cze"})
        //alert(data['Language']);      // vypise Cze
        var temp, jaz;
        temp = data['Language'];
        $('#menu_top').append('<input type="hidden" name="lang" value="' + temp + '"> </input>');
        jaz = $('input[name=lang]').val();
        alert('jaz=' + jaz);            // vypise jaz=Cze
});
</script>

A ted si najdi 7 rozdilu, proc tobe to nejde a mne ano :) A funguje mi to, ikdyz pridat '</div>' na konec

 
Nahoru Odpovědět 14. března 8:14
Avatar
Peter Mlich
Člen
Avatar
Peter Mlich:14. března 8:23

Ale nez zacnes hledat rozdily, tak si sprav validitu kodu. Ta by mohla byt pricinou.
Resp. testni si ten muj kod, jestli ti to jede nebo ne. Takze asi ten tvuj kod neni tak uplne spatne, jak se mi prvne zdalo.

 
Nahoru Odpovědět 14. března 8:23
Avatar
Odpovídá na Peter Mlich
David Šabacký:14. března 12:20

Díky moc, body jsem opravil, ale nakonec jsem to udělal tak, že jsem si to napsal v php, do header.php jsem napsal funkci, která mi natáhne přes <script src="./js/NEJA­KY_JAZYK.js"></scrip­t> json, který je ale napsán jako proměnná, tj. lang = { ..... } a pak už s tím v javascriptu pracuji jako s objekty.

Jinak jsem zkoušel i co jsi mi napsal, nerozchodil jsem to, ale je fakt, že jsem více kámoš s PHP než s javascriptem, ale hlavně že to už chodí.

 
Nahoru Odpovědět 14. března 12:20
Avatar
Peter Mlich
Člen
Avatar
Odpovídá na David Šabacký
Peter Mlich:14. března 13:40

To je divne, zes to nerozchodil. A ja ti tam uvedl i adresare, kde ty soubory mam ulozene. Vse v jedne slozce. Mozna, ze jsi mel jinak adresare. V jsonu jsem to mel z tve stranky.

--- settings.json ---
{"auth":"yes","Depth":"ft","Speed":"kn","Distance":"nm","Language":"Cze"}
 
Nahoru Odpovědět 14. března 13:40
Avatar
David Šabacký:14. března 13:45

Ona je asi chyba v tom, že jsem natahoval např. Eng.js, kde je lang = { .... } a pak jsem chtěl dále pracovat s lang jako s objektem. Podle mne se to natažení nějak neprojevilo, to je tahle část :

....
var imported = document.createElement('script');
                        imported.src = './json/' + jaz + '.js';
                        document.head.appendChild(imported);
...
 
Nahoru Odpovědět 14. března 13:45
Děláme co je v našich silách, aby byly zdejší diskuze co nejkvalitnější. Proto do nich také mohou přispívat pouze registrovaní členové. Pro zapojení do diskuze se přihlas. Pokud ještě nemáš účet, zaregistruj se, je to zdarma.

Zobrazeno 9 zpráv z 9.