Hirdetés
-
LOGOUT.hu
JavaScript != Java (A JavaScript nem összekeverendő a Javával, két különböző programozási nyelvről van szó!)
Új hozzászólás Aktív témák
-
Sk8erPeter
nagyúr
Pedig kell az index Érdemes használnod a debuggoláshoz hasznos gyorseszközöket, nyisd meg a használt böngésző fejlesztőpaneljét (Ctrl+Shift+I vagy F12), kattints a Console fülre, és írasd ki az aktuális elemet, hogy megtudd, mi van benne, például:
console.log("Documents named 'x': ", document.getElementsByName("x"));
Sk8erPeter
-
Zedz
addikt
válasz Sk8erPeter #4051 üzenetére
Hmm értem. Annyit még szeretnék kérdezni, hogy:
function elementsNamedXClickHandler(e)
Itt az e, mint paraméter mit jelöl?
-
Sk8erPeter
nagyúr
A click eseményt - azért lett "e", mert így rövidítettem az "event" szót, de átnevezhetnéd azt a paramétert "kiskutyafule" változónévre is. Érdemes ezt is kiíratnod konzolra - csak tesztelés erejéig, ilyenek ne maradjanak benne az éles kódban!! -, hogy lásd, mi van benne:
console.log('event: ', e);
Hasznos tud lenni, ha ismered a tartalmát: le tudod kérni például a klikkelés koordinátáit, a célzott elemet (a jelen példában e.target, ennek aztán további attribútumai vannak, mint pl. ha lenne id-je az adott elemnek, akkor e.target.id, a "name" attribútum az e.target.name segítségével, a "value" pedig az e.target.value-val érhető el, le tudod kérni a szülőelemet az e.target.parentNode-dal, és így tovább), és egyebeket.Sk8erPeter
-
Zedz
addikt
válasz Sk8erPeter #4053 üzenetére
Ezt a paramétert a DOM-ból szedi ki?
-
Zedz
addikt
válasz Sk8erPeter #4055 üzenetére
Szóval miért kell az event oda? Menne nélküle is nem?
-
Sk8erPeter
nagyúr
-
Zedz
addikt
válasz Sk8erPeter #4057 üzenetére
Az hülyeség volt, köszönöm a segítséget.
-
MrSealRD
veterán
Üdv,
Keretrendszerekkel kapcsolatba kérnék egy kis segítséget.
jQuery vs Ext.JS vs AngularJs a három versenyző. Mindhármat felszedni sok. Kellene választani egyet ami jó...Persze tudom ez relatív. Fontos lenne, hogy gyorsan meg lehessen tanulni, ne legyenek benne fondorlatos trükkök. Custom control mindig is egy problémás terület, de ha egy mód van rá akkor segítse az ilyen jellegű munkát és ne kelljen féllábon ugrálni bolygóegyüttálláskor, hogy működőképes legyen benne valami.
Amolyna pro/kontra érvelés érdekelne, akinek van benne komolyabb tapasztalata.
Előre is kösz.
Mondja, Mr. Babbage, ha rossz adatokat ad meg a gépnek, akkor is jó válasz fog kijönni belőle?" Képtelen vagyok felfogni azt az értelmi zavart, ami valakit egy ilyen kérdés feltevésére késztethet. - by Charles Babbage
-
martonx
veterán
válasz MrSealRD #4059 üzenetére
Előre bocsátom, hogy az Ext.JS-t nem használtam.
De az ugye megvan, hogy egy jquery-t AngularJs-el összehasonlítani, még csak nem is almát a körtével, hanem almafát a körtével összehasonlítás esete.
Ráadásul az AngularJs nem zárja ki a jquery használatát, szóval nem is értem, miért kell választani?
Ráadásul semmi konkrétumot nem írtál ,hogy mire akarod használni?
Ennyi infó alapján, aki állást foglal neked ebben, az biztosan nem tudja, hogy miről beszélÉn kérek elnézést!
-
MrSealRD
veterán
válasz martonx #4060 üzenetére
Azért van ez, mert egyiket sem ismerem. Nem tudom melyik mi fán terem...A választás pedig nem a felhasználás, hanem a tanulási idő lerövidítése miatt kell...
A cél webes vékony kliens készítése. A fókusz a HTML5,JS,CSS2/3 technológiákon van. Ehhez kellene egy olyan "tool" ami támogatja ezt és nem kitekert elméletek mentén valósítottak meg benne dolgokat.
Vállalatirányítási rendszer kliensoldala lesz rá építve....Eddig a kulcs buktatót a custom control-ok készítésében látjuk...
Mondja, Mr. Babbage, ha rossz adatokat ad meg a gépnek, akkor is jó válasz fog kijönni belőle?" Képtelen vagyok felfogni azt az értelmi zavart, ami valakit egy ilyen kérdés feltevésére késztethet. - by Charles Babbage
-
Karma
félisten
válasz MrSealRD #4061 üzenetére
Egyetértek martonxszel abban, hogy a jQuery nem illik a sorba – az csak az alapja lehet egyrészt a JS-sel felturbózott weboldalaknak, másrészt bonyolultabb libek alatt hálózati/DOM manipulációs rétegnek használható, de önmagában kevés.
Az Ext.JS-nek korábbi verziójával dolgoztam, hát az erősen kitekert volt. Hozzá lehetett szokni, de azért...
A felsoroltakból az Angular tanulmányozását javasolnám, de bevenném még a Backbone.js-t is. Ezzel is van konkrét tapasztalatom, gyorsan tanulható és be is vált.Elvben a Knockout is igen erős szerszám a UI összeállításához.
CSS fronton meg (ez mégiscsak egy külön témakör) a Twitter Bootstrap szerintem mindenképp megér két misét.
“All nothings are not equal.”
-
martonx
veterán
CRM rendszert csináltunk legutóbb knockout, jquery, bootstrap kombinációval. Szerintem nagyon könnyen használható, nagyon effektív kombináció. Angulart is használom napi szinten, szintén komoly projektben. Valahogy nem estem hasra tőle. Nagyon sokat tud, nagyon szép kliens oldali architektúrákat lehet rá felhúzni, ugyanakkor bűn gyengén dokumentált, több hónap távlatából se mérnem kijelenteni, hogy értek hozzá. Plusz nekem teljesítményben a ko sokkal erősebbnek tűnik. Én a helyedben knockoutjs (pontosabban durandaljs ha már almát almával) és angularjs között ingadoznék. Látva a kezdőséged, egyértelműen a knockout-ot javasolnám.
Ugyanakkor ezek a frameworkök SPA-khoz előnyösek, közel sem biztos, hogy tényleg ez kell Nektek. Lehet, hogy egy kendoui-al sokkal könnyebben elérhetnétek ugyanazt.Karma, ez nem neked akart válasz lenni, hanem stuszinak. Bocs.
[ Szerkesztve ]
Én kérek elnézést!
-
MrSealRD
veterán
Köszi mindkettőtöknek.
A kérdés óta kicsit belemászta a google rengetegébe... Hát van itt egy-két dolog amit meg kell nézni...
Itt nálunk az a legnagyobb félelem, hogy ha az ügyfél kitalálja, hogy "jó, jó ez a táblázat, de kéne ide még egy gomb, meg oda egy címke..." stb. Akkor lehetőleg tudjunk kezdeni valamit az igényekkel.Most jutott eszembe, hogy van még egy pont. AJAX hívás a szerver felé...web service kiszolgálja. Na igen, de itt milyen objektumok fognak utazni?! Hogy lehet egy Java objektumot áttuszkolni, hogy a kliens oldali (akármi) is megértse?
Mondja, Mr. Babbage, ha rossz adatokat ad meg a gépnek, akkor is jó válasz fog kijönni belőle?" Képtelen vagyok felfogni azt az értelmi zavart, ami valakit egy ilyen kérdés feltevésére késztethet. - by Charles Babbage
-
Karma
félisten
válasz MrSealRD #4064 üzenetére
Úgy, hogy a Java szerveroldal vagy XML-be, vagy JSON-ba (ez utóbbi preferált!) szerializálja az adatokat. Akármilyen is szerveroldal kézi gányolattól a legdurvább enterprise gépszörnyig, valószínűleg könnyen be lehet tenni vagy kapcsolni ezt.
“All nothings are not equal.”
-
martonx
veterán
válasz MrSealRD #4064 üzenetére
"Itt nálunk az a legnagyobb félelem, hogy ha az ügyfél kitalálja, hogy "jó, jó ez a táblázat, de kéne ide még egy gomb, meg oda egy címke..." stb. Akkor lehetőleg tudjunk kezdeni valamit az igényekkel."
Bármit is választotok, egy ilyen feladat megoldása triviális (na jó angularral, közel sem lesz triviális az első pár hónapban, de utána jó lesz az is).
A javascript kezdőségeteket látva, én továbbra is hagynám a francba a helyetekbe az SPA-s megközelítést, és KendoUI-al, vagy valami hasonszőrű cuccal oldanám meg a feladatot. A kérdéseidet elnézve annak is örülni fogtok, ha az első AJAX lekérést megírjátok, nemhogy kliens oldali Dependency Injection-nel, meg closure-ökkel, meg típustalansággal, meg az eddigiektől tökéletesen eltérő megközelítésekkel foglalkozzatok.
Én kérek elnézést!
-
Jim-Y
veterán
válasz Sk8erPeter #3566 üzenetére
Napi régész
Ezt itt elrontottad szerintem:
function addClass(ele, cls) {
if (!this.hasClass(ele, cls)) ele.className += " " + cls;
}A this az nem jó..
function addClass(ele, cls) {
if (!hasClass(ele, cls)) ele.className += " " + cls;
} -
Sk8erPeter
nagyúr
Nem az én kódom, mivel mint látható volt, az openjs.com-ról szedtem, de egyébként ez a kód működőképes, ami ott van. Gondold át jobban: a this jelen esetben az egész window objektumra vonatkozik. Mivel a függvény így a this része, a this.hasClass() működik is... Azt is használhatnád - bár elég undormány lenne - hogy this.alert('akarmi'), és működne.
Hogy sikerült ezt így 124123 év múltán megtalálni?
Sk8erPeter
-
Jim-Y
veterán
válasz Sk8erPeter #4068 üzenetére
Na asszem megvan a bibi, én egy IIFE-ben írtam ezeket, ami ugye egy új environment-et (scope) deklarált aminek már nem volt hasClass-a, ezért is jött az error
Amúgy azért jött elő, mert kellett a hasClass, addClass, removeClass, de nyílván csak ezek miatt nem szedek egy jquery-t, azt pedig tudtam, hogy ide már többször is be lett linkelve.
Még mélyebb menve, pedig azért kellettek, mert egy elementet kellett eltüntetni, js-be pedig nem írunk css-t mint az az összefoglalóban is le vagyon írva, úgyhogy marad a class bővítés ^^
[ Szerkesztve ]
-
-
trisztan94
őstag
válasz martonx #4071 üzenetére
A legenda úgy tartja, hogy csúnya dolog a presentation logicba presentation-t rakni. Ergo JS-be csúnya explicit stílusokat írni, és nem illik.
Inkább cserélgessen osztályokat.Most kezdtem elég komolyan a szép js-css-html kódok írásával foglalkozni, készüljetek fel, hogy be fogok szólni mindenért!
[ Szerkesztve ]
https://heureka-kreativ.hu
-
Sk8erPeter
nagyúr
válasz trisztan94 #4072 üzenetére
Ha jogos dolgokért szólsz be, akkor azzal semmi gond nincs.
Pl. jelen esetben jogos a megjegyzésed.Egyébként pont ezért rakattam ezt az összefoglalóba:
http://www.slideshare.net/fgalassi/refactoring-to-unobtrusive-javascript[ Szerkesztve ]
Sk8erPeter
-
trisztan94
őstag
-
martonx
veterán
-
martonx
veterán
válasz fordfairlane #4075 üzenetére
Ez is jogos, ezért nem használok Notepad szintű IDE-ket. Jó lenne a PH-t felokosítani némi kód intellisense-el
Én kérek elnézést!
-
norby10
csendes tag
Helló!
Lenne egy kis gondom, elkezdtem készíteni egy weboldalt a dreamweaverben es nem sikerül megcsinálnom azt ,hogy mikor zoomolok az egerbol az oldalra akkor ne feher legyen a háttér körüli rész hanem automatikusan átméretezze a background imaget és töltse ki a megmaradt helyet.Ehhez szerintem javascript kell csak még sehol sem kaptam meg. -
Jim-Y
veterán
Sziasztok. Hogy tudok olyan addEventListener-t írni, ahol a handler függvénybe paraméterben meg tudom adni a this-t, illetve még a saját paramétereimet?
Így próbálkoztam:
buttons[i].addEventListener('click', goTo.bind( this, myOtherParams), false );
Ugye ha így írtam volna:
buttons[i].addEventListener('click',function() {
this.akarmi; // ez itt jó, itt a this az éppen aktuális button obj.
});A fentivel az a gond, hogy a goTo fv-ben kiiratva a this-t, undefined-ot kapok :/
[ Szerkesztve ]
-
Sk8erPeter
nagyúr
Mivel neked a this.akarmi kell, miért nem magában az event handlerben passzolod át a szükséges paramétereket a goTo() akármilyen függvénynek?
Amúgy kerülendő, hogy egy ciklusban definiálsz anonim függvényként event handlereket, inkább legyen egy "közös" event handlered, amire kb. függvénypointert adsz át:function tokMindegy(valamiObject, blablaParams) {
// ...
}
function csodalatosEventHandler(e) {
tokMindegy(e.target, "bizony");
// ...
}
buttons[i].addEventListener('click', csodalatosEventHandler);Sk8erPeter
-
Sk8erPeter
nagyúr
válasz Sk8erPeter #4082 üzenetére
ja, itt amúgy nyilván nálad a
buttons[i].addEventListener('click', csodalatosEventHandler);
sor valami for cikluson belül lenne (kiindulva a buttons[i] kódrészletedből), a többi pedig természetesen azonkívül, csak a pontosság kedvéért[ Szerkesztve ]
Sk8erPeter
-
Jim-Y
veterán
válasz Sk8erPeter #4083 üzenetére
Na igen ez így tiszta, pont ezt akarom ezért született meg a kérdés, mert egy bizonyos class összes elemére akarok handlert rakni, tehát cikluson belül vagyok, csak az olvashatóság miatt hagytam ki. És pont azért ez a kérdés, mert nem akarom anonim függvényeket használni, mert az mindig létrehozna egy új függvény objektumot. Amit mivel ciklusban vagyok, szeretnék elkerülni.
Az lenne a lényeg, hogy a handlernek, amit a click eseményre kötök, tudjak saját paramétereket átadni.
item.addEventListener('clck', csodalatosEventHandler -> na ennek akarok paramétert megadni. Ugyanis ezt a függvényt újrahasznosítanám később is.
Készítettem egy példát:
Vagy akkor úgy lehet csak, ahogy írtad is? : [link] Ez azért nem tetszik, mert ha más paraméterrel akarnám meghívni az evHandlert akkor annyiszor kéne egy új forwarder :/
[ Szerkesztve ]
-
Jim-Y
veterán
válasz martonx #4085 üzenetére
De ez még mindig nem az amit szeretnék :/
[link] Lehet, hogy nem is lehet azt megcsinálni ... Csak mert ez az utóbbi sem egy szép megoldás.. annyival jobb, hogy nem halmozom az anonim függvényeket.
Minden esetre, már ez is jobb mintha helyben kezelném le az eseményt, szóval half-win, de azért érdekelne, hogy az alpfeltevést meg lehet-e valósítani
-
Sk8erPeter
nagyúr
Nem értelek, itt már egy az egyben azt írtam le, mit tudsz csinálni.
"item.addEventListener('clck', csodalatosEventHandler -> na ennek akarok paramétert megadni. Ugyanis ezt a függvényt újrahasznosítanám később is."
Miért akarsz olyan módon csinálni valamit, amire nem való, vagy amit nem lehet vele?
https://developer.mozilla.org/en-US/docs/Web/API/EventTarget.addEventListener
target.addEventListener(type, listener[, useCapture]);
target.addEventListener(type, listener[, useCapture, wantsUntrusted ]); // Gecko/Mozilla only
Ez a fejléc, és kész.Azt nem fejtetted ki, mi a gondod azzal, hogy az event handlerben kezeled le, mi történjen a kattintás által célzott (e.target) elemmel? Így szokás ezt elintézni, és ennyi. Hogy most az abban történteket egy erre külön kitalált függvényben intézed-e még el, vagy aztán azonbelül hány függvényt/metódust hívogatsz, az tervezői döntés.
Azt nem mesélted el még, mi az alapfeladat, ami miatt zavar, hogy az addEventListenernek nem tudsz átadni olyan paramétereket, amit az nem enged... Egyébként ilyen alapon saját addEventListenert is definiálhatsz valami más néven, aminek beadhatsz különböző paramétereket, wrappert építve az alap addEventListener köré, aztán egyedileg kezelve, csak nem sok értelmét látom.Ja, még egy fontos dolog: használhatod nyugodtan a data-attribútumokat, így lényegében "be is drótozhatsz" bizonyos tulajdonságokat az elembe, amik konkrétan arra vonatkoznak, ezeket meg lekérheted a JavaScript-kódból. Ez is lehet egyfajta "paraméterezés", és akkor lehet, hogy megkerülted a problémát, mert nem kell óriási switch-case. (Ne brutálsok if-else-t írjál, ha már, erre találták ki a switch-case-t. De előbb gondold végig, vagy írd le ide, mit szeretnél konkrétan.)
[ Szerkesztve ]
Sk8erPeter
-
Jim-Y
veterán
válasz Sk8erPeter #4087 üzenetére
Story mode on
Adott a feladat, vannak egy generált oldalon gombok, a fajta gombból is >= 0 darab, b fajta gombból is >=0 de általában több darab. Ezen kívül még van pár elem amire listenert kell kötni mert azok is csinálnak valamit. Maga az action nagyon egyszerű, a és b gombok esetén is csak el kell navigálni egy adott url-re, de az url-ben változnak a query paraméterek. Ugye ebben semmi nehéz sincs, meg is csináltam gyorsan, kb ilyeneket írtam:
var aButtons = document.getElementsByClassName('a'),
bButtons = document.getElementsByClassName('b'),
cButton = document.getElementById('c'),
dDropdown = document.getElementById('d');
for(var i = 0; i < aButtons.length; ++i){
aButtons[i].addEventListener('click', function(){
var queryParam = this.getAttribute("data-myImportantValue");
window.document.location.href = 'localhost:myport/myservice/..stb/myFun&query=' + queryParam;
return false;
});
}
.. bButtons-re is..
...cButton-re is stb..Mivel gyorsan megvolt, gondoltam akkor megpróbálom szebben megírni, arra gondoltam, hogy például az szebb lenne, meg memória (bár itt annyira mindegy...) szempontjából is jobb lenne, ha a function() { ... } helyett lenne egy eventHandler függvényem amit az összesben tudnék használni. És az lenne még jó, gondoltam, ha a 'localhost:myport/myservice/..stb/myFun' részt, mivel myFun minden esetben más aButton-ök esetén myFunc, bButton-ok esetén myFunc2 stb... ha ezt megadhatnám a handler paraméterében, valamint arra gondoltam, hogy a queryParamétereket &query= is egy paraméterben adnám át a handler függvénynek.
Azt nem tudtam, hogy ezt így nem lehet, sőt, igazából lehet.
Megnéztem az addActionListener Chrome beli implementációját, máshol is tuti így van, ott van egy listeners tömb, amibe a listener függvény objektumokat teszik. Ezáltal később lehet mondani removeListenert amikor csak simán kiveszik a listener függvényobj-ot a tömbből. Ezért ha ezt írom, az nem jó.
addEventListener('click', eventHandler(param1, param2));
Mert ebben az esetben a () miatt rögtön meg is hívom a függvényt ami ugye nem jó, a tömbbe se tudja a böngésző így betenni stb...
Mentem tovább, mi lenne, ha a paramétereket bindolnám az objekthez, így nem kéne a függvényt rögtön meghívni, a böngésző el tudná tárolni a listeners tömbben:
addEventListener('click', eventHandler.bind(thisArg, param1, param2));
Ez jobb, itt a két paraméter a függvényhez lett bindolva, ezeket elérem egy ilyen fügvénnyel utána:
function eventHandler(param1, param2) { }
De ezzel meg az a gond, hogy a thisArg-nak nem tudtam átadni se az event-et, se a this-t. Tehát az eventListener-ben utána nem érem el a aButtons objektet, szóval ez se jó így.
Na és valahol itt írtam be a topikba, hogy hátha valahogy meg lehet úgy csinálni, hogy az eventHandler függvénynek átadom a aButtons(i) referenciát mint thisArg, valamint a saját paramétereimet, és akkor írhattam volna ilyeneket:
for(var i = 0; i < aButtons.length; ++i){
aButtons[i].addEventListener('click', eventHandler(this, 'localhost:myport/myservice/..stb/myFun', {
someId: "data-myImportantValue",
somOtherId: "data-otherImportantId"
}));
}
for(var i = 0; i < bButtons.length; ++i){
bButtons[i].addEventListener('click', eventHandler(this, 'localhost:myport/myservice/..stb/myFun2', {
someStuff: "akarmi"
}));
}
function eventHandler(baseUrl, queryParams) {
var queryString = processParams(queryParams);
// queryString:
// &someId=<this.getAttribute("data-myImportantValue")>&someOtherId=<this.getAttribute("data-otherImportantId")>
window.document.location.href = baseUrl + queryString;
}Szóval semmi komoly, csak szebben/jobban/máshogy akartam megcsinálni, ennyi
Megj: PH random italic tageket tesz a hsz-be, wtf? Nem győzöm törölni őket
Hát de ez mi? Nem tudom kitörölni a hsz-ből a dőlt bekezdéseket, mert visszteszi őket :/ Itt van amit nem sikerül szépen formáznom: pastebin
Karma: de, pont ezt, de a sokBtns eszembe se jutott ^^
[ Szerkesztve ]
-
Karma
félisten
Egyébként az eredeti kérdésre visszatérve pár szóra: nem értem az ellenhurrogást, hiszen a this bepasszolása az eseménykezelőnek igencsak alapvető dolog a legtöbb JS könyvtárban. Adta magát, hogy VanillaJS-sel is meg lehet oldani
[ Szerkesztve ]
“All nothings are not equal.”
-
Jim-Y
veterán
-
Sk8erPeter
nagyúr
Hű basszus, na ez ciki, jó tompa voltam, bocsánat. Most visszanézve a hsz.-eket, így már tiszta, mit szerettél volna. Azt nem fogtam fel eredetileg, hogy mit is szeretnél szebbé tenni, nem is beszélve arról, hogy amikor beszéltünk róla, még a .bind() sem ugrott be, pedig elég kézenfekvő, és még az itteni kódodban is szerepel... Szerintem a legrövidebben úgy lehetne jól megfogalmazni, hogy az adott elemre vonatkozó event handler átadásának pillanatában szeretnél már vonatkozó paramétereket is átpasszolni, az event handlert pedig teljesen általánosan "megfogalmazni", hogy ne legyen tele ronda if-else-ekkel vagy switch-case-ekkel pl. az event.targettől függően.
Szóval sorry, ez most nem az én napom.(#4092) Karma :
"nem értem az ellenhurrogást, hiszen a this bepasszolása az eseménykezelőnek igencsak alapvető dolog"
Jogos, és jó is, hogy beírtad a megoldást; de szerintem jelen esetben pont nem csak a this bepasszolása a lényeg, hanem az egyéb paramétereké (végül is elvileg ez volt a kérdés, nem az, hogy hogy tudja használni a this-t), hiszen a this magában az event handlerben is "elérhető" lenne. Úgy értem, pont a this miatt a .bind() használatának előnye nem pont ennél a feladatnál kristályosodik ki igazán, mert a this működik az ebben a példában szereplő btnHandlerWithoutParams fv.-nél is: http://jsfiddle.net/8LCcR/2/[ Szerkesztve ]
Sk8erPeter
-
Sk8erPeter
nagyúr
válasz martonx #4095 üzenetére
Ja, vagy használható simán a this is az event handlerben, ugyanarra vonatkozik.
(#4089) Jim-Y :
még erre a részre az előbb elfelejtettem reagálni:
"Hát de ez mi? Nem tudom kitörölni a hsz-ből a dőlt bekezdéseket, mert visszteszi őket :/"
Egyértelmű, a szövegedben látszik:
"Na és valahol itt írtam be a topikba, hogy hátha valahogy meg lehet úgy csinálni, hogy az eventHandler függvénynek átadom a aButtons(i) referenciát mint thisArg"
-->
itt az "aButtons[i] referenciát" szövegrésznél a szögletes zárójelbe rakott [i] zavarta meg egész konkrétan. Elfelejtetted a Konvertálatlan/Programkód gombok valamelyikének használatát.Sk8erPeter
-
Sleed
aktív tag
sziasztok,
var request = require('request');
var cheerio = require('cheerio');
var szoveg = new Array();
request('https://news.ycombinator.com', function (error, response, html) {
if (!error && response.statusCode == 200) {
var $ = cheerio.load(html);
$('span.comhead').each(function(i, element){
var a = $(this).prev();
console.log(a.text());
szoveg.push(a);
});
}
});
console.log(szoveg);adott a fenti minta kód, a weboldalról scrapelt címeket tenné egy tömbbe.
Valaki tudna nekem abban segíteni hogy hogyan kéne átírnom, hogy a tömb kiírása előtt megvárja a request befejeződését?
visszaolvastam, tudom, már sokszor felmerült a kérdés, de nem sikerült sehogy sem megoldanom a problémát
-
Karma
félisten
Persze, csak rakd be a végső kiírást a feldolgozás végére.
var request = require('request');
var cheerio = require('cheerio');
var szoveg = new Array();
request('https://news.ycombinator.com', function (error, response, html) {
if (!error && response.statusCode == 200) {
var $ = cheerio.load(html);
$('span.comhead').each(function(i, element){
var a = $(this).prev();
szoveg.push(a);
});
}
console.log(szoveg); // <--- lentről, ide
});[ Szerkesztve ]
“All nothings are not equal.”
-
Karma
félisten
Azért bonyolultabb ennél a helyzet, mert a request szigorúan aszinkron működik, azt mondani a Node-nak hogy "most fagyjál le amíg megjön a válasz" nem lehet.
Ha csak egy valamit akarsz csinálni, kirakhatod a callback függvényt egy külön, külső függvénybe, és név szerint adhatod oda a requestnek. Ezzel el lehet lavírozni, de tisztább, ha vagy az async, vagy a promise-alapú modulok (Q, when) valamelyikét berakod és láncot fűzöl a jövőbeli hívásokból.
Amit linkeltem forrás a whent használja erre.
“All nothings are not equal.”
Új hozzászólás Aktív témák
Hirdetés
- Vírusirtó topic
- Telekom otthoni szolgáltatások (TV, internet, telefon)
- Politika
- Anglia - élmények, tapasztalatok
- Háromféle kivitelben, és nem kis kapacitásokkal jönnek a Micron 6550 ION SSD-i
- Windows 11
- AMD K6-III, és minden ami RETRO - Oldschool tuning
- eBay-es kütyük kis pénzért
- AMD Ryzen 9 / 7 / 5 9***(X) "Zen 5" (AM5)
- Külföldi rendelések: boltok, fizetés, postázás
- További aktív témák...
Állásajánlatok
Cég: HC Pointer Kft.
Város: Pécs
Cég: PCMENTOR SZERVIZ KFT.
Város: Budapest