Keresés

Új hozzászólás Aktív témák

  • Sziasztok!

    JavaScriptben akarok egy olyan funkciót megvalósítani, amely ellenőrzi, hogy van-e pillanatnyilag működő internetkapcsolat. Fontos, hogy localhoston kell, hogy működjön, Chrome alapú böngészőben. A windows.navigator.online-t próbáltam, de az állandóan online-nak látja a kapcsolatot, tehát nem jó megoldás. Ezen kívül még a checknet nevű függvénykönyvtárat is néztem, de az meg elvileg nem működik, ha nem localhoston van futtatva.

    Én most direkt kiróbltam és nálam simán működik a window.navigator.onLine
    true volt, aztán a net kilövése után false

    Szerintem nézd meg jobban.

  • martonx
    veterán

    Sziasztok!

    Továbra is nagyon kezdő vagyok (vagyis újrakezdő, több mint 10 éve tanultam kezdő szinten a nyelvet), ezért lehet, hogy hülye kérdés: adott egy GitHubos JS függvénykönyvtár, amit használni szeretnék teljesen offline módon, magyarul le akarom tölteni. Konkrétan erről van szó: https://www.skypack.dev/view/maplibre-gl
    Itt egy példa alkalmazás: https://codepen.io/klokan/pen/WNoZRyx

    Régebben mindig úgy csináltam, hogy normálisan hivatkoztam bármely JS függvénykönyvtárra a HTML-ből így, aztán ha kellett, letöltöttem a webszerveremre:
      <script src='valami.js'></script>
    Ez a mostanában népszerű import-os megoldás számomra teljesen új. A célom az lenne, hogy egyben letöltsem az egészet a webszerveremre, és behivatkozzam a klasszikus módon. Azonban itt nem tálok ilyen lehetőséget, mert oké, hogy fenn van minden az src könyvtárban, de nem lehet ezt a hagyományos módon, egyben elérni? Tehát "ömlesztve" egy fájlban sehol nem találom. Megjegyzem, ezt más egyéb open-source JS-nél is tapasztalom mostanában.

    import *-gal elvileg hozzáférek az egészhez, de nekem "normálisan" kellene, egy fájlba kiírni.

    Tudtok esetleg erre valami jól bevált megoldást?

    ES6 module syntax-al kell megírnod a javascriptedet, és valamilyen csomagolóval compile-olni a kimenet javascriptet a cégén. PL. webpack erre a legelterjedtebb.
    Elsőre zavarónak hathat, hogy compile-olni kell a javascriptet, de ha belejössz, akkor már tök természetes lesz, miközben van egy csomó előnye ennek a megközelítésnek.

  • nevemfel
    senior tag

    Sziasztok!

    Továbra is nagyon kezdő vagyok (vagyis újrakezdő, több mint 10 éve tanultam kezdő szinten a nyelvet), ezért lehet, hogy hülye kérdés: adott egy GitHubos JS függvénykönyvtár, amit használni szeretnék teljesen offline módon, magyarul le akarom tölteni. Konkrétan erről van szó: https://www.skypack.dev/view/maplibre-gl
    Itt egy példa alkalmazás: https://codepen.io/klokan/pen/WNoZRyx

    Régebben mindig úgy csináltam, hogy normálisan hivatkoztam bármely JS függvénykönyvtárra a HTML-ből így, aztán ha kellett, letöltöttem a webszerveremre:
      <script src='valami.js'></script>
    Ez a mostanában népszerű import-os megoldás számomra teljesen új. A célom az lenne, hogy egyben letöltsem az egészet a webszerveremre, és behivatkozzam a klasszikus módon. Azonban itt nem tálok ilyen lehetőséget, mert oké, hogy fenn van minden az src könyvtárban, de nem lehet ezt a hagyományos módon, egyben elérni? Tehát "ömlesztve" egy fájlban sehol nem találom. Megjegyzem, ezt más egyéb open-source JS-nél is tapasztalom mostanában.

    import *-gal elvileg hozzáférek az egészhez, de nekem "normálisan" kellene, egy fájlba kiírni.

    Tudtok esetleg erre valami jól bevált megoldást?

    <!DOCTYPE html>
    <html>
      <head>
        <meta
          name="viewport"
          content="initial-scale=1,maximum-scale=1,user-scalable=no"
        />
        <link rel="stylesheet" href="maplibre-gl.css" />
        <style>
          #map {
            position: absolute;
            top: 0;
            bottom: 0;
            width: 100%;
          }
        </style>
      </head>
      <body>
        <div id="map"></div>
        <script type="module">
            import { Map, GeolocateControl } from './maplibre-gl.js';
            const mapTilerKey = "get_your_own_OpIi9ZULNHzrESv6T2vL";  // https://cloud.maptiler.com/account/keys/
            const map = new Map({
                container: "map",
                style: `https://api.maptiler.com/maps/hybrid/style.json?key=${mapTilerKey}`,
                center: [1, 15],
                zoom: 3
            });
            map.addControl(
                new GeolocateControl({
                    positionOptions: {
                        enableHighAccuracy: true
                    }
                })
            );
        </script>
      </body>
    </html>

    Innen lehúzhatod a css-t: [link]
    Ez meg a js: [link]

    Nem egyszerű megoldás, de ez a lib eléggé friss még. Majd alakul.

  • coco2
    őstag

    Sziasztok!

    Továbra is nagyon kezdő vagyok (vagyis újrakezdő, több mint 10 éve tanultam kezdő szinten a nyelvet), ezért lehet, hogy hülye kérdés: adott egy GitHubos JS függvénykönyvtár, amit használni szeretnék teljesen offline módon, magyarul le akarom tölteni. Konkrétan erről van szó: https://www.skypack.dev/view/maplibre-gl
    Itt egy példa alkalmazás: https://codepen.io/klokan/pen/WNoZRyx

    Régebben mindig úgy csináltam, hogy normálisan hivatkoztam bármely JS függvénykönyvtárra a HTML-ből így, aztán ha kellett, letöltöttem a webszerveremre:
      <script src='valami.js'></script>
    Ez a mostanában népszerű import-os megoldás számomra teljesen új. A célom az lenne, hogy egyben letöltsem az egészet a webszerveremre, és behivatkozzam a klasszikus módon. Azonban itt nem tálok ilyen lehetőséget, mert oké, hogy fenn van minden az src könyvtárban, de nem lehet ezt a hagyományos módon, egyben elérni? Tehát "ömlesztve" egy fájlban sehol nem találom. Megjegyzem, ezt más egyéb open-source JS-nél is tapasztalom mostanában.

    import *-gal elvileg hozzáférek az egészhez, de nekem "normálisan" kellene, egy fájlba kiírni.

    Tudtok esetleg erre valami jól bevált megoldást?

    Amit hirtelen találtam arról az importról, hogy a browser fér hozzá az anyaghoz, és előkészíti neked böngésző kiegészítésként az erőforrásait. Magát a file-t te nem kapod meg. Gyaníthatóan licencelési kérdés van mögötte. Tényleg vicces, hogy képesek voltak ilyesmit is fejleszteni.

  • nevemfel
    senior tag

    Sziasztok!

    Kezdő vagyok JS-ben, és a következő problémára keresem a megoldást már egy ideje:
    a célom, hogy létrehozzak egy olyan tömböt, amelynek van n db eleme, és mindegyikhez tartozik 2 property, de úgy, hogy mindkét propertryje egy-egy tömb. Továbbá, a létrehozásakor teljesen üres, csak a struktúrája jön létr, később töltöm majd fel.
    Nagyjából így: var objArray = {prop1[], prop2[]}[]

    Természetesen, ez szintaktikailag nem jó. Szerintetek hogyan lehetne ezt szépen megvalósítani?

    Ilyesmire gondolsz?

    var objArray = [
        {
          prop1: [],
          prop2: []
        }
    ];

  • Silεncε
    őstag

    Sziasztok!

    Kezdő vagyok JS-ben, és a következő problémára keresem a megoldást már egy ideje:
    a célom, hogy létrehozzak egy olyan tömböt, amelynek van n db eleme, és mindegyikhez tartozik 2 property, de úgy, hogy mindkét propertryje egy-egy tömb. Továbbá, a létrehozásakor teljesen üres, csak a struktúrája jön létr, később töltöm majd fel.
    Nagyjából így: var objArray = {prop1[], prop2[]}[]

    Természetesen, ez szintaktikailag nem jó. Szerintetek hogyan lehetne ezt szépen megvalósítani?

    JS-ben ezt neked nem kell külön megadnod. Csinálsz egy sima tömböt, (var array = []) aztán szépen pusholhatod bele az objecteket (jelen esetben {prop1: "sth", prop2: "sth"}

  • Jim-Y
    veterán

    Nem ez volt a kérdés.

    Bocs, igazad van visszaolvastam a kerdest meg egyszer. Megprobalom meg egyszer.

    "Lehetséges ez?" Igen.

    Udv

  • Jim-Y
    veterán

    Sziasztok!

    JavaScriptben lehet valahogy billentyűleütést szimulálni? Az lenne a célom, hogy ha meghívom a függvényt, akkor a megadott billentyű leütését szimulálja. Tehát azt eredményezné, mintha fizikailag megnyomnám az adott billentyűt. Lehetséges ez?

  • Jim-Y
    veterán

    Köszi, hogy próbálsz segíteni. :R
    Ezt a Fiddle-t most hagyjuk szerintem, mert összetettebb a probléma, kivülállóként nehéz átlátni. A saját adataimat kellene megosztanom, azt meg nem akarom (port forward-olás meg egyéb dolgok, elég macerás). Végül sikerült egyébként rájönnöm, mi volt a gond.

    Viszont ismét felmerült egy kérdés: adott ez a függvény, amibe be van ágyazva egy másik (jquery):

    var getObject = function (curr_id, prev_id) {

    jQuery.ajax(url,
    {
    dataType: 'json',
    success: function (data, textStatus, jqXHR) {

    if (curr_id == prev_id){var b};
    return b;
    },
    error: function (jqXHR, textStatus, errorThrown) {
    console.log(errorThrown);
    }
    });

    }

    Hogyan tudom megoldani, hogy ha meghívom a getObject függvényt, akkor visszadja a "b" nevű változó értékét?

    Amint XHR-t hasznalsz (ajax, fetch, etc) megvaltozik a kodod viselkedese es neked is mashogyan kell gondolkodnod es a kodod is mashogy kell szervezned. A legjobban tenyleg akkor jarsz ha utananezel a neten (ezer + 1 leiras van rola) hogy hogyan kell aszinkron js kodot kezelni. Arra kell gondolnod, hogy egy AJAX hivas eredmenyere csak valamikor a jovoben szamithatsz (nyilvan mivel egy tavoli szerverrel kell kapcsolatot teremteni ami kb barmennyi ideig eltarthat). Neked ezen ido alatt, amig varsz a tavoli szerverre nem szabad felfuggesztened a programod futasat, annak tovabbra is mukdonie kell. Majd amikor a jovoben megerkezik az uzenet az eredmennyel azt fel kell dolgoznod. Ez ugye az aszinkron mukodes de talan mar ebbol is lehet sejteni hogy a szinkron gondolkodas nem jo es te a peldadban es a kerdeseddel szinkron kodban gondolkozol.

  • sztanozs
    veterán

    Köszi, hogy próbálsz segíteni. :R
    Ezt a Fiddle-t most hagyjuk szerintem, mert összetettebb a probléma, kivülállóként nehéz átlátni. A saját adataimat kellene megosztanom, azt meg nem akarom (port forward-olás meg egyéb dolgok, elég macerás). Végül sikerült egyébként rájönnöm, mi volt a gond.

    Viszont ismét felmerült egy kérdés: adott ez a függvény, amibe be van ágyazva egy másik (jquery):

    var getObject = function (curr_id, prev_id) {

    jQuery.ajax(url,
    {
    dataType: 'json',
    success: function (data, textStatus, jqXHR) {

    if (curr_id == prev_id){var b};
    return b;
    },
    error: function (jqXHR, textStatus, errorThrown) {
    console.log(errorThrown);
    }
    });

    }

    Hogyan tudom megoldani, hogy ha meghívom a getObject függvényt, akkor visszadja a "b" nevű változó értékét?

    igazából a jquery nem ad vissza semmit (azonnal) - a success:-ben kellene azt feldolgoznod - ezért hívják ajax-nak a lekérdezést ("Asynchronous JavaScript + XML")

    illetve ha async: false - ot állítasz be, akkor vár (blokkol) amíg visszatér a lekérés, és vissza tudod adni így:
    return jQuery.ajax...

    Viszont ez jQ v1.8 óta deprecated.

  • martonx
    veterán

    Köszi a választ, Ajaxot most látok először, elkezdek alaposan utánanézni, mert még nem értem mi az a promise.

    Jelenleg így néz ki (sajnos a CORS miatt nem működik ezzel a demo adattal, tehát a poligon nem jelenik meg itt) JSFiddle-ben:
    http://jsfiddle.net/kw3v865/1zo8r5Lp/748/

    A lényeg az, hogy ez egy poligont kellene, hogy megjelenítsen az alaptérképen.
    Nálam localhost-os szerverrel, saját adatokkal működik is. A lényeg az lenne, hogy úgy szeretném megírni, hogy - mivel a szerveren az adatok időnként változnak - egy függvénybe akarom beletenni ezt: vectorSource.addFeatures(formatWFS.readFeatures(response))

    Magyarul az ideális működés az lenne, hogy amikor meghívom a függvényt, akkor újra hozzáadja a feature-t (poligont) a térképhez (a régit nem szabad, hogy törölje!).

    Légyszi üzemeld be a CORS-t, mert így elég nehéz lesz segíteni. Bár önmagában már ezzel is sokat tisztult a kép, hogy mit szeretnél, mert szerintem eredetileg nem is igazán ezt kérdezted :)

    Kicsit beformáztam, hogy ne úgy nézzen ki, mint egy hányás, és szerintem ez már csak szimpla kód refaktorálás feladat.

  • Rickeffe
    aktív tag

    Sziasztok!

    Kezdő vagyok JS-ben, jelenleg ezzel a problémával küzdök: a features nevű változó értékét (ami egy tömb) szeretném felhasználni a függvényen kívül. Ez most szépen kiírja a konzolra a tömb értékét:

    function refresh(){
    var features;
    $.ajax('http://xxx', {
    type: 'GET',
    data: {xxxxxx}
    }).done( function (response) {
    var features = xxxxx
    return console.log(features);
    })
    };
    console.log(refresh())

    Viszont én fel akarom használni a features változó értékét. Mondjuk úgy, hogy egy másik (külső) változónak átadom az értékét. Hogyan lehet ezt megtenni?

    Ha azt csinálom, hogy return console.log helyett : return features, majd így hívom meg a függvényt:
    var tomb = refresh();console.log(tomb); Akkor undefined lesz.

    Így fáradtan csak egy kérdés: a második "features" elé biztosan kell a var?

  • Rickeffe
    aktív tag

    Sziasztok!

    Kezdő vagyok JS-ben, jelenleg ezzel a problémával küzdök: a features nevű változó értékét (ami egy tömb) szeretném felhasználni a függvényen kívül. Ez most szépen kiírja a konzolra a tömb értékét:

    function refresh(){
    var features;
    $.ajax('http://xxx', {
    type: 'GET',
    data: {xxxxxx}
    }).done( function (response) {
    var features = xxxxx
    return console.log(features);
    })
    };
    console.log(refresh())

    Viszont én fel akarom használni a features változó értékét. Mondjuk úgy, hogy egy másik (külső) változónak átadom az értékét. Hogyan lehet ezt megtenni?

    Ha azt csinálom, hogy return console.log helyett : return features, majd így hívom meg a függvényt:
    var tomb = refresh();console.log(tomb); Akkor undefined lesz.

    .

  • martonx
    veterán

    Sziasztok!

    Kezdő vagyok JS-ben, jelenleg ezzel a problémával küzdök: a features nevű változó értékét (ami egy tömb) szeretném felhasználni a függvényen kívül. Ez most szépen kiírja a konzolra a tömb értékét:

    function refresh(){
    var features;
    $.ajax('http://xxx', {
    type: 'GET',
    data: {xxxxxx}
    }).done( function (response) {
    var features = xxxxx
    return console.log(features);
    })
    };
    console.log(refresh())

    Viszont én fel akarom használni a features változó értékét. Mondjuk úgy, hogy egy másik (külső) változónak átadom az értékét. Hogyan lehet ezt megtenni?

    Ha azt csinálom, hogy return console.log helyett : return features, majd így hívom meg a függvényt:
    var tomb = refresh();console.log(tomb); Akkor undefined lesz.

    Szia,

    Több gond is van itt.

    Egyrészt az ajaxnál nem a response-t használod, hanem az xxxx-et, aminek semmi értelme.
    Másrészt az $.ajax egy promise-t csinál, ezt kapja el async módon a .done.

    Azaz a var tomb = refresh();console.log(tomb); esetben azért kapsz undefined-ot, mert hamarabb tér vissza a függvény, mint ahogy a .done-hoz visszatérne az ajax eredménye.

    Megoldás, a függvényednek egy promise-t kellene visszaadnia, és ha kívülről akarod használni, akkor kívül kell majd használnod a .done-t.

    Egy jsfiddle-t indíthatnál a probléma szemléltetésére, akkor konkrétabb segítséget is kaphatnál.

Új hozzászólás Aktív témák