Vydělávej až 160.000 Kč měsíčně! Akreditované rekvalifikační kurzy s garancí práce od 0 Kč. Více informací.
Hledáme nové posily do ITnetwork týmu. Podívej se na volné pozice a přidej se do nejagilnější firmy na trhu - Více informací.

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

Aktivity
Avatar
David Šabacký:26.2.2019 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.2.2019 12:22
Avatar

Člen
Avatar
Odpovídá na David Šabacký
:26.2.2019 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.2.2019 13:25
 
Nahoru Odpovědět
26.2.2019 13:22
Avatar

Člen
Avatar
:26.2.2019 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.2.2019 13:30
Avatar
David Šabacký:26.2.2019 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.2.2019 14:34
Avatar
Peter Mlich
Člen
Avatar
Peter Mlich:26.2.2019 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.2.2019 14:50
Avatar
Odpovídá na Peter Mlich
David Šabacký:26.2.2019 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.2.2019 15:06
 
Nahoru Odpovědět
26.2.2019 15:05
Avatar
Odpovídá na David Šabacký
David Šabacký:26.2.2019 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.2.2019 15:41
Avatar
Peter Mlich
Člen
Avatar
Peter Mlich:27.2.2019 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.2.2019 7:13
Avatar
Peter Mlich
Člen
Avatar
Odpovídá na David Šabacký
Peter Mlich:27.2.2019 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.2.2019 7:16
Avatar
David Šabacký:5.3.2019 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.3.2019 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.