Hirdetés

Keresés

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

  • Teasüti
    nagyúr

    A

    do
    {ciklus mag;
    i++;}
    while (i<50 || másik feltétel)

    kódrészlet vmiért ugyanúgy végtelen ciklusba fullad, pedig nem kéne neki.
    A while feltételénél nem tudok használni logikai operátorokat - and, or?
    A kísérlet idejére beraktam egy számlálót is azt remélve, hogy megvéd a végtelen ciklusoktól.
    De nem jött be. :F

    Ok, megtaláltam.
    && a megoldás. :B

  • Karma
    félisten

    Az fura, emiatt is.
    De jó észrevétel.
    Ez esetben akkor... Hát persze! A substring() meg nem veszi a To paraméterben foglalt indexet. Ugye? :B

    Köszönöm! :R

    Ha már úgyis redundáns amit írtam, hadd egészítsem ki azzal, hogy a slice(0, -1) tisztább, szárazabb, biztonságosabb; de elsősorban jobban olvasható függvény ugyanerre a célra.

  • Karma
    félisten

    Az fura, emiatt is.
    De jó észrevétel.
    Ez esetben akkor... Hát persze! A substring() meg nem veszi a To paraméterben foglalt indexet. Ugye? :B

    Köszönöm! :R

    Így van, balról zárt, jobbról nyílt intervallumot használ :)

  • Karma
    félisten

    A programozói attitűdhöz: van egy-egy ilyen ismerősöm, köztük vérbeli kocka is, aki lehúzott redőnyökkel pijamában éli a magányos életét begubózva - van egy-két furcsasága az életszemléletében szó mi szó. :) Van róla minimális fogalmam, milyen értékrendet követnek a programozók. :B Aztán ott vannak a mérnökinfós szaktársak is. igaz ott is elég nagy a szórás az oda nem való emberek bulizós életvitelétől a burokban élő kockákig bezáróan.
    Szóval itt sem lehet beskatulyázni mindenkit, talán ez a szűkebb réteg és amúgy egészséges családi életet él a többség. Nem fair általánosítani igazad van, de az ilyen heves reakciók erre engedtek következtetni. Elnézést érte! :R

    Ontopic:

    jsFiddle nem futtatja le ezt akárhogy próbálkozom, mi lehet a hiba?
    Egy tömb string elemének egy karakterére próbálok hivatkozni.
    Array[j][0] ami a j elem első karakterét adja vissza.
    Ez egészen addig működik, amíg manuálisan írom be a karakter indexét.
    De megáll működni, amint változót próbálok használni: :(

    var d = Number(this[i].length);
    flash('ok\n' + this[i][d]); //debug kiíratás

    Vagy egyszerűbben:

    this[i][this[i].length]

    Undefined az eredményem. Nem értem. :F
    Ki tudnátok segíteni? Így hirtelen azt se tudom hogy induljak el Google-n.

    Hát, az biztos probléma, hogy a példakódodban a lengthedik karaktert akarod kivenni a stringből, csakhát közben a betűket a JavaScript (hasonlóan egy csomó más nyelvhez) 0-tól length-1-ig indexeli.

    Másrészt nem kell a Number konstruktor, mert a length mindig szám.
    Lassú voltam :)

  • wis
    tag

    A programozói attitűdhöz: van egy-egy ilyen ismerősöm, köztük vérbeli kocka is, aki lehúzott redőnyökkel pijamában éli a magányos életét begubózva - van egy-két furcsasága az életszemléletében szó mi szó. :) Van róla minimális fogalmam, milyen értékrendet követnek a programozók. :B Aztán ott vannak a mérnökinfós szaktársak is. igaz ott is elég nagy a szórás az oda nem való emberek bulizós életvitelétől a burokban élő kockákig bezáróan.
    Szóval itt sem lehet beskatulyázni mindenkit, talán ez a szűkebb réteg és amúgy egészséges családi életet él a többség. Nem fair általánosítani igazad van, de az ilyen heves reakciók erre engedtek következtetni. Elnézést érte! :R

    Ontopic:

    jsFiddle nem futtatja le ezt akárhogy próbálkozom, mi lehet a hiba?
    Egy tömb string elemének egy karakterére próbálok hivatkozni.
    Array[j][0] ami a j elem első karakterét adja vissza.
    Ez egészen addig működik, amíg manuálisan írom be a karakter indexét.
    De megáll működni, amint változót próbálok használni: :(

    var d = Number(this[i].length);
    flash('ok\n' + this[i][d]); //debug kiíratás

    Vagy egyszerűbben:

    this[i][this[i].length]

    Undefined az eredményem. Nem értem. :F
    Ki tudnátok segíteni? Így hirtelen azt se tudom hogy induljak el Google-n.

    A tömbök első eleme a 0, az utolsó a this[i].length-1

  • Sk8erPeter
    nagyúr

    JavaScriptben programozol hozzá, ezzel kapcsolatban, meg a környezettel kérdeztem.
    Fingom sincs. Csak kontárkodok benne. :U De hogy mitől működik... Kézikönyvben nem esik szó a környezetről.
    Egy-egy Android java referencia van hozzá, de sztem azok beemelt feature-ök. Vagy talán Android javascript interface - vagy ilyesmi.

    Eddig minden alkalommal megköszöntem a segítséget, ennél többet nem ajánlhatok fel. Nem kötelező válaszolnod, ha úgy látod jónak. Fura amúgy ez a programozói attitűd, már ha full time programozó vagy. Mindig olyan nagyra vannak az idejükkel - persze vhol jogosan, hisz ebből élnek. És elefántot csinálnak a bolhából, a konvenciókból. :) De mindegy, itt én vagyok a vendég. A válaszod célt ért, ezt külön megköszönöm még egyszer. Nem érzem szükségességét tételesen reagálni rá. Az egy befejezett téma részemről.
    Nem is értem miért van szükség magyarázkodásra.

    Amúgy tisztában vagyok a fórumos segítségnyújtás fogalmával, egy egész topikot én vezetek. :U
    Most hozakodjak elő én is a magánéletemmel?

    Jah, amúgy nem. Nem programoztam ezelőtt egy nyelven sem. Középiskolás Pascal nyilván szánalmas példa lenne, ezért az nem is számít.

    Tegnap hajnalban valszeg jóval felháborodottabbnak tűnő hsz.-t sikerült írnom, mint amilyet akartam, vagy amilyet érdemes lett volna szánnom neked. :) Egyrészt késő/korán volt, másrészt számomra furcsa ez az "arra nem akarok válaszolni"-stílus, én ha segítséget kérek, akkor minden hsz.-re reagálok, akár csak egy böffentés erejéig is, nem a saját fáradtságomra hivatkozom, hogy legalább a segítségnyújtó vágja, hogy igen, átjött az üzenet, nem ignoráltam. Nem hinném, hogy "programozói attitűd" a szabadidő hasznos eltöltésének igénye (amúgy ha már kérdezted, nem vagyok "full time programozó"), ennek az általánosító jellegű kifordítása ("mindig olyan nagyra vannak az idejükkel [...] És elefántot csinálnak a bolhából, a konvenciókból") pedig meglehetősen vicces (véleménynyilvánítás a magas lóról, miközben eddig az ellenkezője igazolódott be :) ), ha ez igaz lenne, akkor nem kaptál volna már annyi segítséget itt a fórumon olyan kérdésekre, amelyeknek te is utánanézhettél volna Google barátod segítségével. Sztem nem konvenció (főleg nem programozói) az, hogy válaszolok a segítségnyújtónak (nem csak magamról beszélek), ez egyszerűen netikett. :) De igazad van, tényleg nem volt érdemes így reagálni, felesleges volt az egészet felhozni, egyszerűen mások vagyunk. :K Tegnap ezt dobta a gép, sorry. Peace!

    Hogy valami hasznosat is írjak, a Sublime Text egy igen jó kis szerkesztőprogi a viszonylag kis erőforrás-igényűek közül. Persze ments folyamatosan kódoláskor. (Általában én nem szeretem bekapcsolni, de van autosave funkciója is emlékeim szerint.)

    (#3716) Karma :
    jogos, a magyarázat fentebb. :D

  • Sk8erPeter
    nagyúr

    Én is erre jutottam. :(
    Arra... nem akarok válaszolni. Fáradt voltam hozzá akkor, és most is.
    Levontam belőle a tanulságot azért, köszi!

    Tasker milyen program? Írtam róla egy cikket. De röviden szólva éppen ezt tudja, amit te is írtál.

    És ha nem jsFiddle-szerű helyeken szokás dolgozni, akkor hol?
    Ti ajánlottátok nekem, hogy erre való...
    Amúgy tetszik, elégedett vagyok vele. Mindig Karma lapjait szerkesztem, ahol elő van készítve a pálya. :D Tud indentálni, meg validálni is. Kell nekem ennél több?

    "Arra... nem akarok válaszolni. Fáradt voltam hozzá akkor, és most is."
    Aha, elgondolkodtató, hogy akkor a jövőben mennyire fáradjunk mi a neked adott válaszokkal. Hidd el, nekünk is időbe kerül másoknak válaszokat írogatni, nekünk is van munkánk, tanulnivalónk, magánéletünk, azt a pár percet sem kell, hogy rád szánjuk, amit esetleg tudnánk. Könyörgöm, kissé fordítva ülsz a lovon. Te akarsz segítséget, de úgy csinálsz, mintha te tennél szívességet. Sosem értettem az ilyen hozzáállást a fórumokon. Mintha itt valami fizetett segítőgépek ülnének a gép előtt, és egész nap várnák a segítési lehetőséget. Hát nagyon nem.

    "Tasker milyen program? Írtam róla egy cikket. De röviden szólva éppen ezt tudja, amit te is írtál."
    Látom sikerült felfogni a kérdés lényegét. :W JavaScriptben programozol hozzá, ezzel kapcsolatban, meg a környezettel kérdeztem.

    "És ha nem jsFiddle-szerű helyeken szokás dolgozni, akkor hol?
    Ti ajánlottátok nekem, hogy erre való..."

    Ne szívassál már... Szerinted mi hol mondtuk, hogy a jsFiddle munkára való? :W Segítek, sehol. Arra való, hogy prezentálj demókat másoknak, megosszatok kódokat, meg együtt lehessen segíteni a másiknak abban, hogy egy célfeladatot hogyan lehet megoldani. Van változatkezelője, jól működik, valóban van kódszépítési lehetőség, ezzel a másik munkáját könnyíted meg, adott esetben sajátodat is, ha nincs valami normális programozási környezeted épp, de bakker, nem arra való, hogy a napi munkádat ott végezd.
    A JSBin egyébként elég gyakran ment, ha már...
    Egyébként nem azt mondtad, hogy más nyelvekben már programoztál? Akkor eddig hogyan?

  • Karma
    félisten

    Én is erre jutottam. :(
    Arra... nem akarok válaszolni. Fáradt voltam hozzá akkor, és most is.
    Levontam belőle a tanulságot azért, köszi!

    Tasker milyen program? Írtam róla egy cikket. De röviden szólva éppen ezt tudja, amit te is írtál.

    És ha nem jsFiddle-szerű helyeken szokás dolgozni, akkor hol?
    Ti ajánlottátok nekem, hogy erre való...
    Amúgy tetszik, elégedett vagyok vele. Mindig Karma lapjait szerkesztem, ahol elő van készítve a pálya. :D Tud indentálni, meg validálni is. Kell nekem ennél több?

    Ha használtad a Fiddle mentés funkcióját, akkor a böngésző historyval vissza tudod hozni. Nem kell regisztrálni ehhez. De ha nem, akkor sajnos tényleg bukó :(

    Offline fejlesztéshez egyébként én Bracketset szoktam használni.

  • Sk8erPeter
    nagyúr

    jsFiddle-n belefutottam egy végtelen ciklusba. A böngészőm bezárta az ablakot. Azóta újra se tudom tölteni azt a linket. Mivel nem vagyok regisztrálva az oldalon, ezért gondolom minden munkám elveszett, ugye?

    Valószínűleg szopóálarc. Nem szokás ilyen helyen dolgozni. :DDD Amúgy ha válaszolnak neked, illik reagálni. ;]

  • Karma
    félisten

    Sziasztok!
    Megint én. :B

    XMLHttpRequest használatával egy HTML weblap letöltésének és parse feldolgozásának mi a módja plain JS kódban?

    Ez alapján próbáltam elindulni, de a .title property-nél már hibát dob. Vmint a "this"-t se értem, hogy az mi akar itt lenni.

    Ez a kódrészlet feltételezi, hogy a fájl amit le akar tölteni a következőt tartalmazza:

    <title>&amp;&<</title>

    Egyébként nem mérvadó. Hasonlóan kéne benne reszelni mint egy XML-ben, legalábbis elvileg - én még sose próbáltam ilyet korábban.

    A this meg az XMLHttpRequest objektum.

  • Sk8erPeter
    nagyúr

    Ha a Prohardveren beszúrsz egy kódot, akkor jelöld ki, és kattints a "Programkód" gombra, ne pedig simán a Monospace-re. Akkor megmarad indentálva.
    Nem irónia, tényleg így néz ki a kód.

    Őőő, megvan, mi az a "result" szó, mit is jelent? Ne oda akarj írni, hanem pl. a HTML-, JS- vagy CSS-panelra...
    [link] Itt is a result panelen van az eredmény.
    Ezt így ahogy van másoltam a HTML kóddal együtt, de nekem nem működött a pre.innerHTML sor (ugye az küldi a result-ra a kimenetet?).

    Milyen natív környezetről beszélsz?
    A telefont, ami végső soron a program fog futni.

    Amúgy nem értem, ez a zárójelezős téma hogy jött ide.
    A fenti kód olvashatósága... az indentálás kapcsán.
    Hogy én még nem zavarodtam bele.
    Gondolom legalábbis, hogy ez miatt nehéz olvasni.

    Nem tudom, most hány elemmel kísérletezel, de amikor mondjuk lesz 1000 név a telefonkönyvben, amiből szűrni kell az általad mutatott módon, akkor nem biztos, hogy azonnal végezni fog vele például egy gyengébb procival rendelkező teló...
    Igaz nálam csak olyan ~50 név lehet, de a telefonom elég gyenge, vagy 4 éves modell.
    Nem hinném, hogy a mai 1+ ghz-es telefonoknak ez gondot okozhatna.

    Az utolsóra:

    function akármi(izé) {
    var "ez meg az";
    return("ez meg az");
    }

    var "ez meg az" = function(izé);

    Na ez így jó vagy rossz? :B
    Asszem ugyanez érvényes az Array.prototype-ra is, azt is a program elejébe illesztem be és nem tudom a benne hazsnált változók össze akadhatnak-e a program többi változójával.
    Értsd: a function()-ben lévő változók "lokálisabbak-e", mint a programban lévők? :D
    De mindjárt olvasom a linkeket...

    "Nem irónia, tényleg így néz ki a kód."
    Úristen, hát az kegyetlenül idétlen. Ez komoly, hogy így kódolsz? Még most szokj le erről, használj valami normális kódszerkesztőt, mert nem fogod átlátni a kódjaidat, most is átláthatatlan a bemásolt kód.
    Tessék:
    http://jsbeautifier.org/
    Szépen indentálja a HTML- és főleg JS-kódokat is.
    Ez alapján itt a kódod:
    http://pastebin.com/zETLwnud
    Kicsit másképp néz ki.

    "[link] Itt is a result panelen van az eredmény."
    Igen, de ne azt akard módosítani, hanem a kódot... :U

    "Ezt így ahogy van másoltam a HTML kóddal együtt, de nekem nem működött a pre.innerHTML sor (ugye az küldi a result-ra a kimenetet?)."
    Nem az "küldi a resultra a kimenetet"... Kis félreértés van itt. A result egyszerűen csak a kód eredményét, kimenetét mutatja, ugyanúgy, mintha te összepakolnád az oldalt ezekből a különböző részekből, aztán megnyitnád a böngésződben, lefutna a kód, és kiadna valamilyen eredményt. Ugyanazt mutatja ez is.

    Van ez az elem a HTML-panelen:
    <pre id="output">
    Waiting...
    </pre>

    Aztán van a JavaScript-panelen ez a rész:
    var pre = document.getElementById('output');
    ez itt egy globális változó lesz, az output id-val rendelkező elemet kérted le, tároltad a "pre" változóba. (mármint Karma tette ezt)
    van aztán ez a sor:
    pre.innerHTML = lat + ", " + lng;
    ez egyszerűen annyit jelent, hogy módosítod a HTML-tartalmát a "pre" elemnek, ami az előbb látható output id-val rendelkező elem. Belerakod vesszővel elválasztva a "lat" és "lng" változók tartalmát. És kész.

    pre.innerHTML = textStatus;
    Ez ugyanaz, csak itt a textStatus tartalmát pakolod bele (ez fog látszani a kimeneten is, mivel a "pre" egy látható elem, aminek a tartalma módosítva lett), ez az AJAX-kommunikáció során, hiba esetén meghívott callback-függvény, ez tehát annyit csinál, hogy egyszerűen megmutatja a válaszként kapott, hibaállapotról szóló szöveget a pre elemen belül.

    "Nem hinném, hogy a mai 1+ ghz-es telefonoknak ez gondot okozhatna."
    Tipikus rossz kódolási érv, a gányolások alkalmazásának alátámasztására. Ne így állj hozzá. És ha valaki nem 1+ GHz-es telefonnal nézi? Amúgy meg teljesen mindegy, mivel nézi, feleslegesen zabálni az erőforrásokat tök felesleges.

    "function akármi(izé) {
    var "ez meg az";
    return("ez meg az");
    }
    var "ez meg az" = function(izé);
    Na ez így jó vagy rossz? :B"

    Ez most itt mi akart lenni? :DDD Kérdésre válaszolva: nagyon rossz. Konkrétan semmi értelme. Nem is értem, itt mit akartál. var kulcsszó után egy string?

    "Asszem ugyanez érvényes az Array.prototype-ra is, azt is a program elejébe illesztem be és nem tudom a benne hazsnált változók össze akadhatnak-e a program többi változójával."
    var kulcsszót használsz, nem.

    "Értsd: a function()-ben lévő változók "lokálisabbak-e", mint a programban lévők? :D"
    Ennek a kérdésnek semmi értelme. :)

    Az algoritmusról pedig már korábban beszélgettetek, azt annyira nem követtem végig, hogy hogyan kell ezt érteni, a tömböd rendezve van-e, meg minden részletet nem tudok.

    Amúgy hogy működik ez a Tasker? Nem ismerem a progit, csak annyit tudok róla, hogy mindenféle feladatot végre lehet hajtani vele Androidon, ütemezést is, meg egyebeket lehet vele intézni, de hogy kódolni hogyan lehet hozzá, arról fogalmam sincs, sosem olvastam még róla, vagy néztem utána.

  • Sk8erPeter
    nagyúr

    Nem, nem "indentálok".
    Én olyan kemény vagyok, hogy még mindig a telefonon pötyögöm be a kódot, amin a szerkesztő nem tud tördelni. ;]
    Néztem a jsFiddle-t, de nem tudom használni (próbáltam átírni te példáidat is, de a result panelra nem tudok írni... más debug kiíratás sem ment.). Próbáltam a böngésző konzolját is, de az se túl felhasználóbarát.

    Inkább marad a natív környezet. Eddig még nem szúrtam el a zárójelezést egyszer sem. :B

    Lássuk csak... Úgy működik, hogy először kigyűjti az "a" tömbbe az összes nullánál nagyobb számot és a "b" tömbben tárolja az előfordulások számát.
    Majd lemásolja az input-ot, hogy az érintetlen maradjon és az "a" tömb hossza szerinti ciklusban meghívja a "b" előfordulások száma szerinti másik ciklust és a ciklusmagban meg megkeresi a kigyűjtött elemek indexeit az input-ból és berakja a "c" tömbbe. Mivel itt a Math.max függvényt használom masszívan, ezért jónak láttam nullázni az aktuális mentett elemet, hogy a következő előfordulást találhassa meg a függvény.
    A "c" tömböt a beágyazott ciklus lefutása után minden menetben üríti az output string-be.

    Kb ennyi.
    Biztos hatékonyabban is meg lehet oldani, meg kevesebb erőforrással, de nem vagyok programozó, meg amúgy is egy szempillantás alatt végez még a telefon is.

    Kérdés:
    a meghívott function()-ökben deklarált változók ugye elszeparáltak a programtól?
    Tehát a function()-ön belüli "var i=0" nem fog összeakadni abban a programban lévő változattal, amiben meghívtam a függvényt? (Abban a programban definiáltam a function()-t is.)

    "Nem, nem "indentálok"."
    Gondolom ez csak irónia volt. :) Ha a Prohardveren beszúrsz egy kódot, akkor jelöld ki, és kattints a "Programkód" gombra, ne pedig simán a Monospace-re. Akkor megmarad indentálva. Ezeket a dolgokat tényleg el kell magyarázni? :DDD

    "Néztem a jsFiddle-t, de nem tudom használni (próbáltam átírni te példáidat is, de a result panelra nem tudok írni... más debug kiíratás sem ment.)."
    Őőő, megvan, mi az a "result" szó, mit is jelent? Ne oda akarj írni, hanem pl. a HTML-, JS- vagy CSS-panelra... :U Nyilván a JavaScript-kódok a JavaScript-panelra mennek, remélem, ezt nem kell elmagyarázni, miért. ;]
    A jsFiddle-nél pedig a TidyUp gomb szolgálja azt a célt, hogy a kódod szebb legyen, mindegyik panelban szépíti.

    "Próbáltam a böngésző konzolját is, de az se túl felhasználóbarát."
    Miért is kellene, hogy felhasználóbarát legyen? Nem az a dolga.

    "Inkább marad a natív környezet."
    Milyen natív környezetről beszélsz?

    "Eddig még nem szúrtam el a zárójelezést egyszer sem. :B"
    Botrány. Ezek a mai fiatalok... :U :DDD Majd el fogod. Amúgy nem értem, ez a zárójelezős téma hogy jött ide, amikor Karma tanácsokat adott a tömbhasználathoz és az algoritmusodhoz... ;]

    Amúgy meglehetősen gány, amit csinálsz, ez az összefűzögetős valami (annyira nem próbáltam meg értelmezni). Nem tudom, most hány elemmel kísérletezel, de amikor mondjuk lesz 1000 név a telefonkönyvben, amiből szűrni kell az általad mutatott módon, akkor nem biztos, hogy azonnal végezni fog vele például egy gyengébb procival rendelkező teló...

    "a meghívott function()-ökben deklarált változók ugye elszeparáltak a programtól?"
    Ez így elég rossz megfogalmazás, lokális változóknak hívják, amikről beszélsz, var kulcsszóval kell deklarálni őket JavaScriptben. Ha nincs var kulcsszó, akkor felmerülhet a probléma, hogy az adott függvényben esetleg globális változót felülírsz vele, aminek pontosan ugyanez a neve, és elérhető az adott scope-ból. Ha referenciákra vagy kíváncsi, kapcsolódó téma:
    http://stackoverflow.com/questions/7744611/pass-variables-by-reference-in-javascript/7744623#7744623
    http://stackoverflow.com/questions/518000/is-javascript-a-pass-by-reference-or-pass-by-value-language
    http://stackoverflow.com/questions/13104494/does-javascript-pass-by-reference
    csak hogy ne nekem kelljen elmagyarázni. :DDD
    Egyébként más esetben a függvényeid nem fognak tudni egymás lokális változóiról.

  • Karma
    félisten

    Ezt hoztam össze:

    Array.prototype.indexesOfGreatestNums = function () {
    var result = new String, a = new Array, b = new Array; c = new Array;
    a[0] = 0, b[0] = 0;
    for (var i =0, j=0; i<this.length;i++) {
    if (this[i]>0) {
    if (a.indexOf(this[i].toString())>=0) {if (b[a.indexOf(this[i].toString())] !== undefined) {b[a.indexOf(this[i].toString())]++} else {b[a.indexOf(this[i].toString())]=1;};} else {
    a[j] = this[i];
    if (b[j] !== undefined) {b[j]++} else {b[j] = 1};
    j++;
    }; //end else
    }; // end if
    }; // end for
    //var ok = popup('',a + '\n' + b,false,'','',30);
    var that = this.slice(0);
    for (i=0;i<a.length;i++) {
    for (j=0;j<b[a.indexOf(Math.max.apply('',a).toString())];j++) {
    //flash(that.join() +'\n'+ a.join());
    c[j] = that.indexOf(Math.max.apply('',a).toString());
    that[that.indexOf(Math.max.apply('',a).toString())] = 0;
    }; //end for
    result = result + c.join() + '>';
    c = [];
    a[a.indexOf(Math.max.apply('',a).toString())] = 0;
    }; // end for
    return(result);
    }; // end prototype

    Azt tudja, hogy egy számokból álló tömbből egy string-ben visszaadja az elemek értékei alapján csökkenő sorrendben az indexüket.
    Azonos értékek indexei vesszővel elválasztva, különbözőké pedig ">" jellel. NaN elemekre nem érzékeny, ha meg az egész tömb csak nullákból áll, akkor meg csak egy ">" jelet ad vissza.

    Pl:
    var a = [0,0,1,1,5,12,5,0,0];
    var b = a.indexesOfGreatestNums();

    b = "5>4,6>2,3>"

    Ezzel szeretném kiértékelni majd a telefonkönyves regex keresés eredményét, ahol a találatok számát mentem a fenti "a" tömbbe, amiben az indexek megegyeznek a névjegyzék tömbjével.

    Remélem a tényleges kódban indentálsz, és csak a fórummotor miatt ilyen olvashatatlan... Emiatt (is) egy kicsit nehéz megítélni, hogy nem-e futsz túl hosszú köröket a probléma körül spirálban.

    Például a kettővel ezelőtti kérdésnél nem értettem, hogy miért használsz push-t a tömbre - JavaScriptben a [] operátorral akármilyen indexnek tudsz értéket adni, nem kell kézzel növelgetni.

    Meg amúgy az alapprobléma is olyan, hogy lehetnek rá kész algoritmusok. Maga a stringtávolság témakörben ott a Levenshtein távolság, bár telefonszámokhoz lehet overkill. Mondjuk regexelni is szinte biztosan (bár nem látom tisztán hogy hol jön a képbe).

  • Teasüti
    nagyúr

    Ezt hoztam össze:

    Array.prototype.indexesOfGreatestNums = function () {
    var result = new String, a = new Array, b = new Array; c = new Array;
    a[0] = 0, b[0] = 0;
    for (var i =0, j=0; i<this.length;i++) {
    if (this[i]>0) {
    if (a.indexOf(this[i].toString())>=0) {if (b[a.indexOf(this[i].toString())] !== undefined) {b[a.indexOf(this[i].toString())]++} else {b[a.indexOf(this[i].toString())]=1;};} else {
    a[j] = this[i];
    if (b[j] !== undefined) {b[j]++} else {b[j] = 1};
    j++;
    }; //end else
    }; // end if
    }; // end for
    //var ok = popup('',a + '\n' + b,false,'','',30);
    var that = this.slice(0);
    for (i=0;i<a.length;i++) {
    for (j=0;j<b[a.indexOf(Math.max.apply('',a).toString())];j++) {
    //flash(that.join() +'\n'+ a.join());
    c[j] = that.indexOf(Math.max.apply('',a).toString());
    that[that.indexOf(Math.max.apply('',a).toString())] = 0;
    }; //end for
    result = result + c.join() + '>';
    c = [];
    a[a.indexOf(Math.max.apply('',a).toString())] = 0;
    }; // end for
    return(result);
    }; // end prototype

    Azt tudja, hogy egy számokból álló tömbből egy string-ben visszaadja az elemek értékei alapján csökkenő sorrendben az indexüket.
    Azonos értékek indexei vesszővel elválasztva, különbözőké pedig ">" jellel. NaN elemekre nem érzékeny, ha meg az egész tömb csak nullákból áll, akkor meg csak egy ">" jelet ad vissza.

    Pl:
    var a = [0,0,1,1,5,12,5,0,0];
    var b = a.indexesOfGreatestNums();

    b = "5>4,6>2,3>"

    Ezzel szeretném kiértékelni majd a telefonkönyves regex keresés eredményét, ahol a találatok számát mentem a fenti "a" tömbbe, amiben az indexek megegyeznek a névjegyzék tömbjével.

    Jah és ez az egész macera azért, mert az Array.indexOf() csak az első elemet dobja vissza, és nincs egy jó kereső metódus a natív Array() objektumban, így csináltam egyet magamnak.
    (Gondolom ha majd vmikor elkezdtem használni vmelyik könyvtárat, akkor a homlokomhoz fogok csapni előbb-utóbb...)

  • Sk8erPeter
    nagyúr

    Technikai segítség!! :B
    Hogy tudnék egy tömb adott sorszámú eleméhez hozzáadni egyet, ha még nincs deklarálva az adott elem?
    Csak számokkal dolgozok itt:

    var a = new Array;
    for (var i=0, j=0;i<this.length;i++) {
    if (this[i]>0) {a[j]++; j++};
    };

    Az értelme most nem érdekes, csak egy péda.
    Az az érdekes, hogy az undefined elemekhez nem tudok hozzáadni egyet, viszont nem definiálhatom le előre, mert nem tudom mekkora lesz a tömb.
    Undefined helyett arra lenne szükségem, hogy alapértelmezésben nulla legyen minden újabb elem az "a" tömbben.
    Vagy legalábbis tudjam növelni az értékét (nem jó az a[j]=1; ). :F

    szerk:
    hmm, ha jól sejtem, akkor nem úszom meg az elemek előzetes vizsgálata nélkül:

    if (a[j] == 'undefined') {a.push(1)} else {a[j]++};

    Pont ezt akartam írni én is, hogy ennek úgy, ahogy van, ebben a formában semmi értelme. Tényleg leírhatnád, mi a célod.

    (#3696) Teasüti :
    biztos, hogy ezt az egészet JavaScripttel akarod elintézni, nem pedig valami adatbázissal, amiben még lehet is értelmesen keresgélni és tárolni (mivel például erre való)?

  • Jim-Y
    veterán

    Technikai segítség!! :B
    Hogy tudnék egy tömb adott sorszámú eleméhez hozzáadni egyet, ha még nincs deklarálva az adott elem?
    Csak számokkal dolgozok itt:

    var a = new Array;
    for (var i=0, j=0;i<this.length;i++) {
    if (this[i]>0) {a[j]++; j++};
    };

    Az értelme most nem érdekes, csak egy péda.
    Az az érdekes, hogy az undefined elemekhez nem tudok hozzáadni egyet, viszont nem definiálhatom le előre, mert nem tudom mekkora lesz a tömb.
    Undefined helyett arra lenne szükségem, hogy alapértelmezésben nulla legyen minden újabb elem az "a" tömbben.
    Vagy legalábbis tudjam növelni az értékét (nem jó az a[j]=1; ). :F

    szerk:
    hmm, ha jól sejtem, akkor nem úszom meg az elemek előzetes vizsgálata nélkül:

    if (a[j] == 'undefined') {a.push(1)} else {a[j]++};

    Mit akarsz csinálni?

    Amit linkeltél pédát annak semmi értelme. Mire lenne szükséged? Mi értelmne valami nem létezőhöz hozzáadni egyet?!

  • Sk8erPeter
    nagyúr

    Már megtértem a JSON-t illetően.
    Google API-kon kívül még nem találkoztam ezzel a formátummal.
    Most épp az időjárás rss szolgáltatással bíró oldalak keresgélése van terítéken, de hírből sem találkoztam még JSON-nal ezen a területen.

    RSS? És csodálkozol, hogy az nem JSON? :DDD Olvasnivaló.

  • Sk8erPeter
    nagyúr

    Elég kevés a JSON, jellemzően eddig csak Google API-k esetén találkoztam vele.
    XML-t népszerűbbnek találom azok kevés webservice közt, amikhez szerencsém volt eddig.

    Nem egészen értem hogy kellene összefűznöm több getElementsByTagName hívást.
    Ezzel csak gyerekek nélküli tag-et tudok lekérni, amint képbe került egy-egy alsóbb szint, úgy a hívás már nem működik még a 0 sorszámokkal sem a tömbben.

    Fiddle: csalás, itt te már jQuery-t használsz, ha jól sejtem! :DD
    Egyelőre még hanyagolom a library-k használatát, azon egyszerű okból, hogy a natív JS kóddal se barátkoztam még meg igazán. Meg a jQuery is egy tekintélyes tananyag W3School-on JS után, szóval nem is látom még a fától az erdőt.
    De köszi az oldalt, remélem pont azt tudja, mint a Tasker környezet! :R

    Meg az XML kezelését is el szeretném sajátítani, tekintve, hogy azok vannak többségben.
    ...talán vmi programozói attitűd maradványa, hogy először a nehezebb úton akarok menni, mielőtt megismerem a módját hogy lehet egy huszárvágással elintézni ugyanazt. :B

    "Elég kevés a JSON, jellemzően eddig csak Google API-k esetén találkoztam vele."
    Hogy érted azt, hogy "kevés a JSON"? Csak mert meglehetősen népszerű formátum, aminek lehet örülni. :)

    "XML-t népszerűbbnek találom azok kevés webservice közt, amikhez szerencsém volt eddig."
    Az XML valóban a legnépszerűbb volt ilyen tekintetben régen, mostanra ez már nem igaz. A JSON-formátum ma már meglehetősen elterjedt, például REST API-nál (is) nagyon jellemző.
    Amúgy meg amiatt, hogy XML-lel többször találkoztál, miért szívatod magadat a nehézkesebb kezelésével, ha nem muszáj? :) Főleg, ha egyiknek a kezelését sem sajátítottad el még olyan szinten. Karmával már ketten is mutattunk példát rá, hogy jelen esetben mennyivel egyszerűbb dolgod lenne a JSON-formátum használatával.

    Azt viszont jó ötletnek tartom, hogy először a plain JavaScripttel akarsz megismerkedni, és csak utána a jQuery-vel, hidd el, meg fog térülni, úgyhogy ebben bölcsen döntöttél.

    Szerk.: most látom, hogy már kitárgyalták a többiek is az XML vs. JSON-témát, a későbbiek olvasása nélkül reagáltam egyből, sorry.

  • Teasüti
    nagyúr

    getTimezoneOffset() a "The difference, in minutes, between UTC and local time."
    Vagyis GMT+2 zónában -120 eredményt ad, amit szintén összeadással korrigálom a getTime()-ot.

    Ezt a kódot futtatom, ami ebben a formában jó eredményt ad:

    var localtime = Math.floor(new Date().getTime() / 1000);
    var localoffset = new Date().getTimezoneOffset() * 60;
    time = localtime + localoffset;
    //flashLong(time + ' = ' + localtime + localoffset);
    var http =new XMLHttpRequest();
    http.onreadystatechange = function () {
    if (http.readyState==4) {
    var json = JSON.parse(http.responseText);
    var offset = (json.dstOffset + json.rawOffset);
    time = time + offset;
    time = new Date(time*1000); //sec to millisec
    say(city + ' területén a ' + json.timeZoneName + ' szerint jelenleg ' + time.getHours() + ' óra ' + time.getMinutes()+ ' perc van.','com.svox.classic','hun-HUN','media',5,5); //Adott város területén a valamilyen időzóna szerint xx óra yy perc van.

    Összehasonlítottam magam is a Tasker JS getTime() metódust ezzel, és tényleg UTC eredményt ad. :F Legalábbis e szerint.

    Na most akkor hol a hiba? :F
    A London, Anglia példában a magyar időhöz képest mégse kaptam jó eredményt önmagában a Date().getTime() paranccsal.
    Jelenleg meg ugye -7200 másodperc a request előtt, majd +3600 a válasz után és így adja vissza a helyes 11:50-et (ha itthon 12:50 van).

  • Karma
    félisten

    Nem csak W3School referenciája hibás ezek szerint. Itt sincs szó UTC-ről a getTime() esetében.

    Márpedig valamit biztosan rosszul számolsz. Írtam egy fiddle-t, kipróbáltam több időzónára állítva a gépemet (persze mindig újraindítva a Chrome-ot), és a timestamp mindig ugyanazt az eredményt adja vissza. A timezoneOffset változik - ami egyébként a mi időzónánkban negatív, azaz adja magát, hogy kivonni kell a mi zónánk idejéhez.

    Az epoch idő konverziót meg itt ellenőriztem. És nekem végig jók lettek a számok.

    Namost a Google Timezone API-t nem ismerem, arról nem tudok nyilatkozni, de megvizslatom mindjárt :N

  • Teasüti
    nagyúr

    Satckoverflow-on is mindenki ezt hajtogatja, de én sem így tapasztaltam.
    Ha Match.floor(new Date().getTime() /1000) paranccsal készítek időbélyeget (Ugye Magyarország jeleleg GMT+2) a Google Timezone API-hoz (London, Anglia a kérdés - ami ugye GMT+1 a DST miatt), akkor a válaszban kapott offset-eket hozzáadva az elküldött időbélyeghez egy órával a helyi időnél többet kapok.
    És jól kezeltem az offset-eket, Google dokumentáció szerint csak egyszerűen össze kell adni mindent.

    Viszont ha a getTime()-ból kapott bélyeget korrigálom a getTimezoneOffset()-el, akkor kapok helyes választ. :U

    Forrás.
    Illetve W3School-on a Date() referenciában sincs feltüntetve a getTime() metódusnál az UTC.

    Amúgy tényleg qrva jó ez a JSON, két egyszerű mondattal elintéztem azt (amiből az egyik a parse), amit XML-nél úgy kellett összeollózni több parancsból. :K

    Nem csak W3School referenciája hibás ezek szerint. Itt sincs szó UTC-ről a getTime() esetében.

  • martonx
    veterán

    Elég kevés a JSON, jellemzően eddig csak Google API-k esetén találkoztam vele.
    XML-t népszerűbbnek találom azok kevés webservice közt, amikhez szerencsém volt eddig.

    Nem egészen értem hogy kellene összefűznöm több getElementsByTagName hívást.
    Ezzel csak gyerekek nélküli tag-et tudok lekérni, amint képbe került egy-egy alsóbb szint, úgy a hívás már nem működik még a 0 sorszámokkal sem a tömbben.

    Fiddle: csalás, itt te már jQuery-t használsz, ha jól sejtem! :DD
    Egyelőre még hanyagolom a library-k használatát, azon egyszerű okból, hogy a natív JS kóddal se barátkoztam még meg igazán. Meg a jQuery is egy tekintélyes tananyag W3School-on JS után, szóval nem is látom még a fától az erdőt.
    De köszi az oldalt, remélem pont azt tudja, mint a Tasker környezet! :R

    Meg az XML kezelését is el szeretném sajátítani, tekintve, hogy azok vannak többségben.
    ...talán vmi programozói attitűd maradványa, hogy először a nehezebb úton akarok menni, mielőtt megismerem a módját hogy lehet egy huszárvágással elintézni ugyanazt. :B

    "Elég kevés a JSON, jellemzően eddig csak Google API-k esetén találkoztam vele.
    XML-t népszerűbbnek találom azok kevés webservice közt, amikhez szerencsém volt eddig." - figyi az XML a múlt, a JSON a jövő. Viszont historikus okokból persze, hogy rengeteg XML-es webszolgáltatással lehet találkozni, de ez akkor is a múlt (illetve per pillanat még a jelen egy jó része), pont az olyan szopáshalmok miatt, mint amikbe te is belefutsz. Ráadásul a SOAP (a webszerveres xml kommunikáció élharcos protokollja) pont annyira szabványos, mint a HTML, vagyis ahány implementáció, annyiféle kompatiblitiási problémába lehet belefutni.

  • Karma
    félisten

    Hogy tudnék összerakni ezekből egy UTC időbélyeget másodpercekben? :W
    new Date().getTime() //a helyi időt adja vissza;
    Date.UTC() //ezt meg fel kell tölteni adatokkal, de fogalmam sincs, hogy vajon a helyi időt adjam át neki? Próbáltam a getUTCxxx elemekkel - elég sokáig tartott bepötyögni -, de NaN-t kaptam csak.

    A getTime nem helyi időt ad vissza, hanem UTC szerint az eltelt ezredmásodpercek számát.
    Szóval semmit se kell ehhez varázsolnod a kapott számon.

    Esetleg ha UNIX timestamp kell, akkor oszd el ezerrel.

  • Speeedfire
    félisten

    Hogy tudnék összerakni ezekből egy UTC időbélyeget másodpercekben? :W
    new Date().getTime() //a helyi időt adja vissza;
    Date.UTC() //ezt meg fel kell tölteni adatokkal, de fogalmam sincs, hogy vajon a helyi időt adjam át neki? Próbáltam a getUTCxxx elemekkel - elég sokáig tartott bepötyögni -, de NaN-t kaptam csak.

    var d = new Date();
    var date = Date.UTC(d.getFullYear(),d.getMonth(),d.getDate());
    //a hónap 0-11 formában van

  • Karma
    félisten

    Elég kevés a JSON, jellemzően eddig csak Google API-k esetén találkoztam vele.
    XML-t népszerűbbnek találom azok kevés webservice közt, amikhez szerencsém volt eddig.

    Nem egészen értem hogy kellene összefűznöm több getElementsByTagName hívást.
    Ezzel csak gyerekek nélküli tag-et tudok lekérni, amint képbe került egy-egy alsóbb szint, úgy a hívás már nem működik még a 0 sorszámokkal sem a tömbben.

    Fiddle: csalás, itt te már jQuery-t használsz, ha jól sejtem! :DD
    Egyelőre még hanyagolom a library-k használatát, azon egyszerű okból, hogy a natív JS kóddal se barátkoztam még meg igazán. Meg a jQuery is egy tekintélyes tananyag W3School-on JS után, szóval nem is látom még a fától az erdőt.
    De köszi az oldalt, remélem pont azt tudja, mint a Tasker környezet! :R

    Meg az XML kezelését is el szeretném sajátítani, tekintve, hogy azok vannak többségben.
    ...talán vmi programozói attitűd maradványa, hogy először a nehezebb úton akarok menni, mielőtt megismerem a módját hogy lehet egy huszárvágással elintézni ugyanazt. :B

    Ja, jQuery-t használok, mert nem szeretek annyit írni :P Az xmlDocument viszont pont ugyanaz, csak egyszerűbben leér. Amire neked kell, nem számít a különbség.

    A láncolást mindjárt kipróbálom, mennie kéne pedig XML Elementeken is.

  • Karma
    félisten

    :R

    XML getElements-ben kérnék megint segítséget.
    W3School példák (bookstore) alapján azt hittem az xmlDoc.getElementsByTagName('név')[0].childNodes[0].nodeValue paranccsal megkaphatom az értékét adott sorszámú izé, node-nak.
    Úgy értelmeztem, hogy a childNode[0].nodeValue, ami ha a Tag csak egy karakterláncból áll, akkor visszaadja, ami a <tag></tag> között van. És childNodes[1].nodeValue esetén már azt adja vissza, ami itt van: <tag><első elem></első elem></tag>. (Majd a childNodes[3] adja vissza a második elemet, stb. Illetve úgy értelmeztem, hogy a childNodes[2] meg az első elem utáni - és így tovább - karakterláncot adná vissza tag-estül mindenestül.)

    De undefined az eredményem. :(
    Szóval a primitív tag-eket le tudom kérni, de hogy kell hivatkozni a struktúrált adatokra, mint az alábbi példában?
    <location>
    <lat>szélességi fok</lat>
    <lng>hosszúsági fok</lng>
    </location>
    Itt a "location" tag-re szeretnék hivatkozni, mert az az egyedi, lat és lng többször is előfordul a táblázatban.

    Így próbáltam először:

    var loc = xmlDoc.getElementsByTagName('location')[0].childNodes[1].nodevalue + ',' + xmlDoc.getElementsByTagName('Location')[0].childNodes[3].nodeValue

    Persze sikertelenül. Egyesével se ad vissza semmit semmilyen childNode sorszámmal.

    Nem jó a nodeValue, mert a koordináta nem az lng element értéke, hanem van neki egy text node gyereke. Ha az lng-ig eljutottál, használd a textContent mezőt, és nem kell kibogarásznod ezt a szintet.

    Egyszerűen egyébként sok getElementsByTagName hívással tudod pontosan megkeresni azt aki neked kell (így elkerülöd azt, hogy ha nincs whitespace a válaszban, összetörik a parsered) - de igazából sokkal jobb lenne áttérni a JSON formátumra. Most már sejtheted, hogy miért.

    (Összehasonlításképp: res.results[0].geomerty.location.lng a JSON objektumból kivenni ugyanezt.)

    Egyébként itt egy fiddle amivel ezt kísérleteztem. Egyszerűbb mint telefonon :)

  • Karma
    félisten

    Ez esetben technikailag akkor nem változót hozok létre?
    Pl. xmlDoc előtt még egy példában sem láttam var utasítást.
    Bár elé rakva így is működik.

    Eddig úgy csináltam a letöltést, hogy:
    function get(url) {
    var http = new XMLHttpRequest();
    http.open("GET",url,false);
    http.send();
    return(http.responseXML);
    }

    Majd
    kódsor, blahblahbla...
    var data = get(url); //http.open(false) esetén gyakorlatilag megvárja a JS a választ, mielőtt tovább haladna a sorban.
    //XML parse
    egyéb kódok, blah blah...

    data = get(másik url);
    és így tovább, blahblahblah...

    Szóval ez így közel sem ideális? :)
    Tudom nem kezeli a sikeres letöltésen kívül egyik másik esetet sem jelenleg.
    De ezt tényleg csak úgy tudom elérni, hogy az onreadystatechange = function() {ide bezsúfolom a program teljes hátralévő részét?? :F }

    Vagy esetleg csak ami a response kezeléséhez kell, aztán kiugrok a send() mögé?

    Ha böngészőben lennél, akkor azt mondanám, hogy a szinkron viselkedés semmilyen körülmény mellett nem elfogadható és szervezd át úgy, hogy az egyes hívásokat lekezelő függvényeket kezelő onreadystatechange függvényeket előre definiáld.

    Ha használnál külső libeket, akkor meg a Promise objektumok felé terelnélek.

    Viszont így Taskerben nem olyan kritikus a helyzet.

    ---

    Változós téma.

    A változó deklarálás, amit a var kulcsszóval jelzel, és az objektumlétrehozás, amit csinálhatsz a new kulcsszóval, illetve primitív típusoknál a literálokkal meg regexnél a / jelekkel, két egymástól teljesen független dolog.

    A deklarálás különböző formáiról, hogy akkor hol tárolódnak az értékek, és hogy hat rájuk a delete operátor pont tegnap olvastam egy nagyon jó cikket.

  • martonx
    veterán

    Arra mi a bevett gyakorlat, ha nem akarom beágyazni a request utáni kódot az onreadystatechange függvénybe, hanem szisztematikusan szeretnék haladni tovább a sorban? (Több egymás utáni lekérésem van, amit nekem elég bonyolult lenne egymásba ágyazni a fenti módon.)

    Pedig ez lenne a bevett gyakorlat, erőltetni kell az aszinkronitást.

  • martonx
    veterán

    Köszönöm, kicsit döcögősen, de az XML-ből már ki tudok nyerni adatot a .getElementsByTagName().childNodes[0].nodeValue paranccsal. JSON-nal még nem volt időm foglalkozni. Bár referenciát még nem találtam a node-ok szerepére a fenti sorban, esetleges alternatívákra.

    Ami még zavaros nekem, azok a deklarációknál lévő new kifejezések.
    Erről kaphatnék egy kis magyarázatot? :R
    Pl. var x = new String.
    Vagy xhttp = new XMLHttpRequest().
    Vagy reg = new RegExp() (amit eddig csak egyszerűen karakterláncként hoztam létre két "/" között).

    new-val hozol létre új objektumot.

  • Teasüti
    nagyúr

    Köszönöm, kicsit döcögősen, de az XML-ből már ki tudok nyerni adatot a .getElementsByTagName().childNodes[0].nodeValue paranccsal. JSON-nal még nem volt időm foglalkozni. Bár referenciát még nem találtam a node-ok szerepére a fenti sorban, esetleges alternatívákra.

    Ami még zavaros nekem, azok a deklarációknál lévő new kifejezések.
    Erről kaphatnék egy kis magyarázatot? :R
    Pl. var x = new String.
    Vagy xhttp = new XMLHttpRequest().
    Vagy reg = new RegExp() (amit eddig csak egyszerűen karakterláncként hoztam létre két "/" között).

    Bár referenciát még nem találtam a node-ok szerepére a fenti sorban, esetleges alternatívákra.
    Nem aktuális.

  • Sk8erPeter
    nagyúr

    És JSON formátumot is fel tudok dolgozni XML objektumként?
    Menet közben kiviláglott a JSON mint olyan Javascript rokonsága, de megzavart, hogy én itt XMLHttp-vel dolgozom.
    W3School-on tanultam, amit eddig tudok, de úgy találtam erről vajmi keveset ír, vagy csak nincs jól összeszedve.
    Még mindig nem tudom hogy álljak neki. :B

    "És JSON formátumot is fel tudok dolgozni XML objektumként?"
    Nem jó a kérdés, JSON-formátumot annak megfelelő formában is kell feldolgozni. :) Kell hozzá általában egy JSON.parse() (+[link]), lásd alább.
    Nagy előnye, hogy nagyon kényelmes is feldolgozni (ha a natív JSON-támogatás adott (ha nem, akkor külső könyvtár vagy más megoldás kell)).

    "megzavart, hogy én itt XMLHttp-vel dolgozom"
    Nem csodálom, de ne zavarjon meg.

    Az előzőek alapján írtam neked egy nagyon egyszerű példakódot, nyisd meg a böngésződ fejlesztőpanelét (F12-vel), kattints a Console fülre, majd egyszerűen másold be ezt a kódot, és nyomj egy Entert, hogy lásd, mit csinál:

    // https://developer.mozilla.org/en-US/docs/AJAX/Getting_Started

    var loc = "40.714224,-73.961452"; // csak példa
    var httpRequest = new XMLHttpRequest();

    httpRequest.onreadystatechange = function() {

    if (httpRequest.readyState === 4) {
    if (httpRequest.status === 200) {
    var responseText = httpRequest.responseText;
    var responseTextInJSON = window.JSON.parse(httpRequest.responseText);

    if(responseTextInJSON.status === "OK"){
    var results = responseTextInJSON.results;
    for(var i = 0; i<results.length; i++) {
    var addr = results[i].formatted_address;
    console.log("formatted address: ", addr);
    // további eredmények...
    }
    }
    else {
    // valami gáz van, kezeld le a hibát
    }
    } else {
    // para van
    alert('There was a problem with the request.');
    }
    }
    };

    var url = "https://maps.googleapis.com/maps/api/geocode/xml?latlng="+loc+"&sensor=true";
    // inkább JSON-formátum
    url = "https://maps.googleapis.com/maps/api/geocode/json?latlng="+loc+"&sensor=true";
    var isAsynchronous = true; // változtasd meg, attól függően, hogy aszinkron kérést szeretnél, vagy sem
    httpRequest.open("GET", url, isAsynchronous);
    httpRequest.send();

    Így elég egyszerűen fel lehetett dolgozni az eredményeket, amiket JSON-formátumban kaptál.

  • fordfairlane
    veterán

    És JSON formátumot is fel tudok dolgozni XML objektumként?
    Menet közben kiviláglott a JSON mint olyan Javascript rokonsága, de megzavart, hogy én itt XMLHttp-vel dolgozom.
    W3School-on tanultam, amit eddig tudok, de úgy találtam erről vajmi keveset ír, vagy csak nincs jól összeszedve.
    Még mindig nem tudom hogy álljak neki. :B

    Ha megvan az eredmény JSON formátumban, egyszerűen belerakod egy változóba, majd a megfelelő propertyket lekérdezed.

    var v = http.responseText;

    for(i = 0; i < v.results.length;i ++) {
    alert(v.results[i].formatted_address);
    }

    alert helyett persze használj valami más debug kiíratást.

  • Sk8erPeter
    nagyúr

    Köszönöm a sok segítséget!
    Itt egy újabb, amivel megkönnyíthetnéd az életem: :B
    Ha már működésre tudtam bírni az XML http reguest funkciót, akkor van arra vmi eljárás, hogy kell könnyedén kezelni az XML táblázatot?
    Egy string-be töltöm le az adatokat (responseText) és jelenleg a split() függvénnyel vagdosom ki belőle a nyers információkat.
    Létezik ennél elegánsabb és könnyebb módszer? (Gondolom igen)
    Jobban mondva mi lenne az? (Gondolom responseXML formában kéne letölteni és ez vmi DOM objektum lesz, amiben közvetlenül elérem az infókat paraméteres formában talán?)

    Huh, ez a split()-es megoldás nagyon rossz. Karma előttem már írta az XML-es megoldást, de ha van rá lehetőséged, használhatnád a JSON-ös megoldást is, én legalábbis mindenképp kellemesebbnek találom JavaScript-kódban ennek a használatát.

    Példa, ha már a Google Maps volt a központi téma:
    XML:
    https://maps.googleapis.com/maps/api/geocode/xml?latlng=40.714224,-73.961452&sensor=true
    JSON:
    https://maps.googleapis.com/maps/api/geocode/json?latlng=40.714224,-73.961452&sensor=true

    (az URL-ben csak az "xml" részt kellett "json"-re változtatni)

  • Karma
    félisten

    Köszönöm a sok segítséget!
    Itt egy újabb, amivel megkönnyíthetnéd az életem: :B
    Ha már működésre tudtam bírni az XML http reguest funkciót, akkor van arra vmi eljárás, hogy kell könnyedén kezelni az XML táblázatot?
    Egy string-be töltöm le az adatokat (responseText) és jelenleg a split() függvénnyel vagdosom ki belőle a nyers információkat.
    Létezik ennél elegánsabb és könnyebb módszer? (Gondolom igen)
    Jobban mondva mi lenne az? (Gondolom responseXML formában kéne letölteni és ez vmi DOM objektum lesz, amiben közvetlenül elérem az infókat paraméteres formában talán?)

    Hát a splitet nagyon gyorsan felejtsd el erre a célra! Amellett hogy ocsmány, nagyon hamar karbantarthatatlanná válik.

    Természetesen van jobb megoldás, a responseXML-lel pont, ahogy írtad. Ha well-formed XML jön le, elvileg semmi dolgod nincs, csak ezt használni a text helyett. Példát láss itt.

  • Sk8erPeter
    nagyúr

    Paraméterezésnél vannak olyan beépített funkcióim Android-on, hogy mondjuk egy alkalmazás indítása, ami így néz ki:
    loadApp(str label,str data,boolean)
    Ilyen esetben, ha nem akarok semmilyen adatot átadni az alkalmazásnak, jobban mondva, hogy egy köztes paramétert nem akarok definiálni egy függvényeben, akkor itt mi a teendő szintaktikailag?
    Eddig így csináltam: loadApp('Viber','',false) ahol egy üres string-et írtam a középső paraméterbe.
    Próbáltam e módon is: loadApp('Viber',false) de ez nem működött. Úgy tűnik nem lehet csak úgy kihagyni egy köztes paramétert.

    A protokoll nagy ötlet volt!! Most működik a letöltés!!! :C
    Ezer köszönet, egy hete szenvedek vele és sehol nem került említésre sem, még az Android-os fórumokon is protokoll nélküli url címek szerepeltek a példákban!! :R

    Na, ennek örülök, szívesen! :K

    ============================

    "Eddig így csináltam: loadApp('Viber','',false) ahol egy üres string-et írtam a középső paraméterbe.
    Próbáltam e módon is: loadApp('Viber',false) de ez nem működött. Úgy tűnik nem lehet csak úgy kihagyni egy köztes paramétert."

    Az első változat a jó ebben az esetben. Vagy másik lehetőség az undefined-ot átadni: loadApp('Viber', undefined, false)
    Lehetnek default paramétereid is, minimális trükközéssel, csak példakóddal:

    function loadApp(label, data, blabla) {
    // ..........................
    if(data === "" | data === undefined) {
    data = "hello";
    }
    if(typeof blabla !== "boolean") {
    blabla = false;
    }

    // ..........................
    // ..........................
    }

    Ekkor meghívhatod így: loadApp('Viber');, és ekkor a data változó egyenlő lesz a "hello" stringgel, a blabla változó pedig false-szal.
    Persze ez csak példa.
    Aztán játszhatsz még ilyenekkel is, mint például a PHP-s empty() függvény JS-be átültetett változata, és azzal is csekkolhatod egy változó értékét:
    http://phpjs.org/functions/empty/
    és ha valamelyik változó üres, akkor adsz neki egy alapértelmezett értéket, mint az előbbi példa.

  • Sk8erPeter
    nagyúr

    Igen ez már feltűnt, viszont egyáltalán semmilyen válaszom nincs.
    Fel se megy a telefon a netre. :(

    Lekértem a ready state-et is menet közben e módon:
    http.onreadystatechange = function() {flash(http.readyState}
    El is számol 1-től 4-ig, de a 3 az kimarad.
    És üres a responseText. :F
    Bármilyen linket adok meg egyiket sem tölti le, mindig üres marad az adat.

    Már arra is rájöttem, hogy return csak akkor kell, ha function() szerepében hívom meg a kódot, amúgy meg egyszerűen flash(http.responseText) kódot használtam.
    A flash() itt egy Android Toast üzenetet jelenít meg; olyasmi, mint az alert().

    MÁS:
    Mi a helyzet akkor, ha kevesebb paramétert akarok átadni egy függvénynek, mint amennyi definiálva van?
    Pl:
    function hello(text1,text2)
    { blahblahblah }

    hello(text1);

    Ilyen esetben kötelező mindkét paramétert átadni?
    Ezt nem csak a saját készítésű függvényekre értem, hanem a JavaScript-ben általában.
    Nem találtam erre vonatkozó infót egyik tutorial-ban sem, hogy kötelező-e teljesen paraméterezni.

    Most látom csak, eddig elkerülte a figyelmem, hogy a protokollt a cím elé nem írtad oda, ez gondot okozhat, tehát ezt:
    http.open("GET","maps.googleapis.com/maps/api/geocode/xml?latlng="+loc+"&sensor=true", false);

    cseréld le erre:
    http.open("GET","https://maps.googleapis.com/maps/api/geocode/xml?latlng="+loc+"&sensor=true", false);

    Annyit változtattam, hogy eléraktam a "https://" részt.

    Amúgy ez a "http" változónév nem túl szerencsés sztem. Akkor már "httpRequest" vagy ilyesmi, amit használnak pl. MDN-en is, kifejezőbb kicsit. Bár nem kardinális kérdés.

    Tehát akkor összességében valami ilyesmi legyen a kódod (próbáld ki, ez megy-e):

    var loc = "40.714224,-73.961452"; // csak példa
    var httpRequest = new XMLHttpRequest();
    httpRequest.onreadystatechange = function() {
    flash("readyState: "+httpRequest.readyState);
    flash("status: "+httpRequest.status);
    };
    var url = "https://maps.googleapis.com/maps/api/geocode/xml?latlng="+loc+"&sensor=true";
    var isAsynchronous = true; // változtasd meg, attól függően, hogy aszinkron kérést szeretnél, vagy sem
    httpRequest.open("GET", url, isAsynchronous);
    httpRequest.send();

    ==================================

    "Mi a helyzet akkor, ha kevesebb paramétert akarok átadni egy függvénynek, mint amennyi definiálva van?"
    JavaScriptben ez működőképes, ez esetben a függvény paraméterei egyszerűen definiálatlanok maradnak, tehát undefined "értékük" lesz.

    Böngészőben ezt nagyon egyszerűen tudod csekkolni, nyisd meg az adott böngésző fejlesztőpanelét (ált. F12), kattints a Console feliratra, majd simán másold be ezt a kis kódot, és próbálgasd (az általad mutatott példával):

    function hello(var1, var2) {
    console.log('var1', var1);
    console.log('var2', var2);
    }

    var blabla = 42;
    hello(blabla);

    Ez esetben var1 értéke 42 lesz, var2 értéke undefined.
    Ha úgy hívod meg a függvényt, hogy nem adsz át paramétert (így: hello();), akkor mindkét paraméter (var1, var2) értéke undefined.

  • Sk8erPeter
    nagyúr

    http.open("GET","maps.googleapis.com/maps/api/geocode/xml?latlng=loc&sensor=true", false);

    Azontúl, amit wis javasolt, még egy igen nagy hiba van a kódodban így első ránézésre, konkrétan az idemásolt részletben: a "loc" nevű változó értéke nem helyettesítődik be, mivel nem konkatenálod, tehát így kéne átírnod a fenti sort:

    http.open("GET","maps.googleapis.com/maps/api/geocode/xml?latlng="+loc+"&sensor=true", false);

    Mint látható, itt már hozzáfűződik a "loc" változó értéke.

  • wis
    tag

    Sziasztok!
    Szükségem lenne némi segítségre hogy tudnék működésre bírni egy http get parancsot.
    Használ itt vki Tasker-t btw?
    Android-on próbálom futtatni a kódot, de csak Toast üzenetben kommunikál velem a fordító, és nem vmi informatív.

    Eddig erre jutottam, de csak "OK." Toast üzenet a jutalmam és legalább nem történik semmi:

    var loc = [egy gps koordináta];
    var http = new XMLHttpRequest ();
    http.open("GET","maps.googleapis.com/maps/api/geocode/xml?latlng=loc&sensor=true", false);
    send();
    return(http.responseText);

    Majd az ezután következő sorok már le se futnak.
    Idézőjeleket próbáltam aposztróffal is, úgy se jobb.
    Ha jól sejtem, akkor a "http" változóban kéne visszakapnom szövegként a letöltött adatokat.
    Akinek ez ismerős, kérem segítsen! :R
    Jah amúgy épp csak ismerkedek a JS-el, semmi tapasztalatom nincs benne és informatikus se vagyok. :B
    Köszönöm!

    Szia!

    Nem tudom Androidon mi futtatja ezt a kódot, de szerintem először egy asztali böngészőben teszteld.
    Így egyből kijött a hiba: send(); helyett http.send();

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

Hirdetés