Java týden
Procvič si angličtinu zdarma s naším americkým e-learningem! Learn more
Pouze tento týden sleva až 80 % na celý Java e-learning!

Diskuze: JSON promenné i v jiných fukncích

Aktivity (2)
Avatar
David Šabacký:26. února 12:22

Ahoj lidi,

mám v proměnné en.json názvy jednotlivých klíčů, které chci využít pro jazykovou mutaci. Další bude soubor cz.json,apod. Potřebuji do javascruptu natáhnout json soubor a odkazovat se na jednotlivé názvy. Problém je v tom, že pokut natáhnu JSON přes $get.JSON, nejsou mi přístupné objekty JSON i v jiných funkcích.

Takže výňatek z kodu:

$.getJSON( 'json/' + lang +'.json?'  + new Date().getTime(), function( data ) {

        $('#main').append('<div id="tab_header" class="header" >' + data.alarm.name +' </div>');

        $('#main').append('<a href="#" onclick="new_alarm()"> <img name="add_user" src="./icons/add_alarm.png"> </a>');

});

zde normálně vydím objekt data.alarm.name, ale kdtž ho chi použít ve funkci new_alarm, tak je undefined.

Múžete mi, prosím, někdo pomoci?

Díky

 
Odpovědět 26. února 12:22
Avatar
Odpovídá na David Šabacký
Vladislav Ladicky:26. února 13:22

Natiahnutý json proste ulož do premennej v nadradenom mennom priestore:

var uri = `json/${lang}.json?${new Date().getTime()}`;
var dict = {};

$.getJSON(uri, function(data) {
  dict = data
});

$('#main').append('<div id="tab_header" class="header">' + dict.alarm.name + '</div>');
$('#main').append('<a href="#" onclick="new_alarm()"><img name="add_user" src="./icons/add_alarm.png"></a>');
Editováno 26. února 13:25
 
Nahoru Odpovědět 26. února 13:22
Avatar
Vladislav Ladicky:26. února 13:30

Už som príliš zmlsaný reaktívnymi frameworkami... To, čo som napísal, bude fungovať len ak bude objekt dict vždy obsahovať všetky kľúče.

 
Nahoru Odpovědět 26. února 13:30
Avatar
David Šabacký:26. února 14:34

Ahoj,

stále mi to nechodí, ale uvědomil jsem si, že to stejně musím udělat pro celý systém, je to nastavení jazyka. Proto jsem k tomu přistoupil takto:
do header.html jsem dal :
<script src="./json/lan­g.js"></scrip­t>

ten obashuje:
var lang = {"en": {"alarm":{"na­me":"Alarms","na­vigation":"Na­vigation","en­vironment":"En­vironment","pro­pulsion":"Pro­pulsion","elec­trical":"Elec­trical","noti­fications":"No­tifications","ste­ering":"Steerin­g","tanks":"Tan­ks","sensors":"Sen­sors"}}}

pokud přímo v lang.js dopíšu
alert(lang.en­.alarm.name);

vše chodí jak má, ale pokud to napíšu do nějakého dalšího scriptu, bohužel není proměnný lang dostupná. Zkoušel jsem změnit na "var lang = " i " lang = ", ale nic.

Nevíte náhodou někdo co s tím?

Díky a zatím.

 
Nahoru Odpovědět 26. února 14:34
Avatar
Peter Mlich
Člen
Avatar
Peter Mlich:26. února 14:50

???

--- soubor1.html ---
<script src="lang.js"></script>
<script>alert(lang.en.alarm.name);</script> // Alarms

--- soubor2.html ---
<script src="lang.js"></script>
<script src="x.js"></script>

--- x.js ---
alert(lang.en.alarm.name); // Alarms

--- lang.js ---
var lang = {"en": {"alarm":{"name":"Alarms","navigation":"Navigation","environment":"Environment","propulsion":"Propulsion","electrical":"Electrical","notifications":"Notifications","steering":"Steering","tanks":"Tanks","sensors":"Sensors"}}}
 
Nahoru Odpovědět 26. února 14:50
Avatar
Odpovídá na Peter Mlich
David Šabacký:26. února 15:05

jo díky, ale ted mi to chodí tak na půl, když mám v x.js

alert(lang.en.alarm.name); // Alarms

je to OK, ale, když v x.js mám

function alarms(){
alert(lang.en.alarm.name); // Alarms
}

tak tu proměnnou tam nemám ....

Editováno 26. února 15:06
 
Nahoru Odpovědět 26. února 15:05
Avatar
Odpovídá na David Šabacký
David Šabacký:26. února 15:41

Tak už mi to funguje, je to trochu kostrbaté, ale chodí to, x.js musí vypadat takto:

function alarms(){
        jaz = $('input[name=lang]').val(); //nastavi jazyk podle input
        obj={}
        obj=lang[jaz]
        alert(obj.alarm.name)
 
Nahoru Odpovědět 26. února 15:41
Avatar
Peter Mlich
Člen
Avatar
Peter Mlich:27. února 7:13

???

--- x.js ---
//alert(lang.en.alarm.name);

function alarms(){
alert(lang.en.alarm.name); // Alarms
}

alarms(); // Alarms

Stale mi to funguje. Takze opravdu nechapu, kde delas chybu.

 
Nahoru Odpovědět 27. února 7:13
Avatar
Peter Mlich
Člen
Avatar
Odpovídá na David Šabacký
Peter Mlich:27. února 7:16

A mimochodem, tvuj predchozi kod nebosahuje var. Takze, vsechny promene se stavaji globalnimi. Coz ti muze delat problemy v jine casti programu.
A nemas tak ukoncovaci zavorku funkce.

function alarms(){
        var jaz, obj;
        jaz = $('input[name=lang]').val(); //nastavi jazyk podle input
        obj={}
        obj=lang[jaz]
        alert(obj.alarm.name)
// nebo
//        var jaz = $('input[name=lang]').val(); //nastavi jazyk podle input
//        var obj={}
       } // ukoncovaci zavorka
 
Nahoru Odpovědět 27. února 7:16
Avatar
David Šabacký:5. března 13:48

Moc díky, už to chodí ... měl jsi pravdu, nebyl tam var a udělalo mi to bordel někde jinde.

 
Nahoru Odpovědět 5. března 13:48
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 10 zpráv z 10.