Autor | Zpráva | ||
---|---|---|---|
ServIT Profil |
#1 · Zasláno: 2. 2. 2017, 14:24:03
Zdravím
Opětovně narážím na problém s firebugem. Už kdysi jsem ho řešil - ale je tu znova, a nic nepomáhá. pokud dynamicky vložím do stránky JS pomocí ajaxu, tento se v debuggeru nezobrazuje. //# sourceURL nepomáhá ( ani zastaralý //@ ). SourceURL jsem měl na konci kódu ( jak upozorňuji na firebug stránce ) taky i na začátku kodu a nic. Zkoušel jsem různé parametry - celou cestu k fiktivnímu souboru nebo jen jméno .. nic. Vložím -li do kódu " debugger; ", běh kódu se v tom místě zastaví, otevře se degugger a kód se dá krokovat, ale v okně zdrojáku vidím úplně jinou část kódu. Ta vložená část ve zdrojáku vůbec není vidět. Nenajdu funkce ani objekty z toho vloženého JS. Kód v prohlížeči funguje, ale byly tam drobné nesmysly, které jsem nedokázal najít, a ten debugger mi tedy moc nepomohl. Naprostou nouzí bylo krokování skriptu opatřeného direktivou "debugger;" na jedné obrazovce a na druhé obrazovce koukat na zdroják přímo v editoru, ale jakmile dojde na větvení, jsem ne větvi. Výpisy pomocí console.log() /* diky kterým jsem nakonec chybu objevil */ se zobrazují nenakliknutelné (nedá se tedy nahlédnout na kód, který lognutí vyvolal ) , ale kupodivu se správným jménem ( toho fiktivního souboru) jako bych dělal něco .. špatně .. ale nedokážu zjistit, co . Věřím, že se s tímto již řada z vás potýkala, a snad i někdo našel řešení. Mám firefox 51.0 / 64 na opensuse 41.1 ( ale to je nepodstatné, myslím) a firebug poslední 2.0.18. Taktéž jsem stáhl firefox for developers (dnes, aktualni verzi) a chová se to stejně. předem díky za nakopnutí. Milan |
||
_es Profil |
#2 · Zasláno: 2. 2. 2017, 19:20:17
ServIT:
„pokud dynamicky vložím do stránky JS pomocí ajaxu“ A ako presne to robíš? A prečo vlastne? Nestačí ti dynamicky vkladať len dáta a tie spracúvať pomocou už existujúceho JS kódu? |
||
Keeehi Profil |
#3 · Zasláno: 2. 2. 2017, 20:06:33
ServIT:
Jak píše _es, dává smysl mít javascript kód celý v prohlížeči a posílat si jen data. Nicméně, nejsi evidentně sám, kdo má takový problém. První z řešení, které jsem nalezl je mít debugger; v kódu dvakrát.
A zkoušel jsi jiný prohlížeč? Třeba chrome? |
||
ServIT Profil |
#4 · Zasláno: 2. 2. 2017, 23:13:21
Problém je složitější ..
Projekt slouží k prohlížení / editování dat z databáze. Aby bylo zobrazování / editace dat ( no ok - psaní kódu :) ) trochu efektivnější, mám třídy pro zobrazení a třídy pro editaci dat ( datum, číslo, text, dlouhý text, odkaz, ano/ne ..... ) . Parametry zobrazení /editace se částečně načtou z vlastností polí z databáze a částečně je lze doladit vlastním popisem v asociovaném poli. V prohlížeči se zobrazuje přehledová tabulka ( všechny nebo vyfiltrované věty ve zkráceném výstupu ) a vedle detail - všechny položky zvoleného záznamu. Tlačítkem se na místo detailu načte formulář, jehož parametry jsou také doladěné v tom asociovaném poli. Dopředu nevím, jaký typ datového vstupu vyžaduje jaký kód na ošetření vstupu. Takže třída edit-tabulky , která pomocí input - tříd vytváří tabulku, z každé Input-třídy vytáhne potřebný JS na ošetření a kód který vytváří ajax-odpověď pak dostane samotný kód tabulky-formuláře a k tomu ty funkce/objekty JS. Takže dopředu nevím jaký JS kód bude potřeba, a vlastně mne to nezajímá. To musí projít automaticky. Funguje to, nebojte se. Pouze v asociovaném poli ( je hezky košaté ) uvedu, jak chci data zobrazit / editovat a nestarám se, jak se to provede. Moje jediná starost je před zápisem ošetřit data, aby byly zachovány relace, ( to je už napůl automatické ), aby byl údaj tam, kde neni povoleno údaj nemít a podobně. Fígl je tedy v tom, že neřeším u zobrazení dat z tabulky nic, jen v tom poli popíšu, co chci dostat. ( no ano a napsat specifickou kontrolu dat, je li potřeba ). Umí to i relace ( i vícenásobné ) a docela dobře se tak tvoří jednoduché zobrazení / editace dat z jakéhokoli zdroje ( pokud je zdrojem MariaDB - hehe - ne, pro jiné db je vcelku snadné to předělat / doplnit, ale neřešil jsem to ). Mám ve správě údaje, které prostě nejde snadno pytlíkovat přes phpMyAdmin, takže jsem šel vlastní cestou. Taky se člověk trochu naučí, že, a to není na škodu. Mimochodem používám k tomu naprosto skvělou metodu nazvanou myslím ajax-command ( ne - "Ajax web services" - doplněno po dohledání zdroje ) rozšířenou o další funkce, takže odpovědi se vytvářejí naprosto pohodlně, a dokážou jako skalpel říznout do stránky tam, kde je potřeba i na více místech v rámci jednoho volání. Začínal jsem s ttím základem, ale brzy se to rozrostlo a vytvořilo základ dynamických změn obsahu stránky, které jedině používám. www.the-art-of-web.com/php/ajax ( alespoň myslím, že to byla tato ... nakopávka ) |
||
ServIT Profil |
#5 · Zasláno: 3. 2. 2017, 00:37:33
Keeehi:
hm, ten problém, na který odkazuješ je trochu odlišný, z roku 2009, taky jsem ho měl. Mně se na "debugger" vykonávání přeruší (netřeba vkládat 2x ) , dá se krokovat atd, ale nevidím zdroják. asi pul roku zpet jsem to potřeboval, a normálka to s tímto samým kódem ( +-) fungovalo ... a teď nic. Nevím, jestli má cenu jim psát, zase anglicky síce přečtu, ale něco sesmolit, to by asi nepochopili. Koneckonců .. firebug už není... stal se součástí Developer tools . Ale diky za snahu. |
||
_es Profil |
#6 · Zasláno: 3. 2. 2017, 10:56:08
ServIT [#4]:
Nie je ti vôbec rozumieť, čo robíš, ako to robíš, prečo to nejde nejako „normálnejšie“... Čo také si v JS predstavuješ po pojmom „třídy“? A prečo by na zobrazenie a editovanie tabuliek v databáze nestačilo normálne stiahnuť zo servera len to potrebné, teda len samotné dáta z tabuliek, a na nejaký zápis do tabuliek na server odoslať tiež len to potrebné, teda len samotné dáta? V opačnom smere predsa tiež z JS neodosielaš PHP kód, čo má server vykonať, či nebodaj áno? |
||
Časová prodleva: 3 dny
|
|||
ServIT Profil |
#7 · Zasláno: 6. 2. 2017, 08:47:00
_es:
Čo také si v JS predstavuješ po pojmom „třídy“? Třídy zobrazení / editace dat jsou psány v PHP ( např. class dataformat_string extends dataformat { .... } ) class input_by_select extends input_format { ..... } V JS používám třídy ( k obsluze vstupu ) vyjímečně , v podstatě myslím, že jediná třída tam je jen na volání XHR ajax dotazu, což přímo s tímto nesouvisí. Jo a pak jedna factorka na kalendář. a s tou jsem se právě mordoval, když jsem zjistil, že ji v debuggeru nevidím. Problém je tedy ten, že editační formulář je do stránky vložen ajaxem spolu s obslužným JS. Protože používám tu metodu viz výše, dokážu jedním dotazem modifikovat několik nezávislých elementů na stránce, a takto si v pohodě přihrávám i JS kód. Jenže pak není vidět v debuggeru správně. Ale koukám, že tady to nevyřeším. |
||
_es Profil |
#8 · Zasláno: 6. 2. 2017, 11:40:35
ServIT:
„Problém je tedy ten, že editační formulář je do stránky vložen ajaxem spolu s obslužným JS.“ A problém, zároveň aj so zlepšením funkčnosti stránky, vyriešiš tak, že ten „obslužný JS“ nebudeš ťahať AJAXom, ale ho dáš do stránky „normálne“ a z AJAXu ho odstrániš - v dôsledku toho ti odpadnú aj tie problémy, čo popisuješ. |
||
ServIT Profil |
#9 · Zasláno: 7. 2. 2017, 06:47:08
Zlepšením funkčnosti stránky ? děláš si legraci ? Nestěžuju si na funkčnost stránky ale firebugu.
Přihrávání kódu ajaxem má být podporováno, podle všeho. |
||
Keeehi Profil |
#10 · Zasláno: 7. 2. 2017, 07:07:12
ServIT:
„Přihrávání kódu ajaxem má být podporováno, podle všeho.“ Nikdo tu nevyvrací, že by to mělo být podporováno. Je to ale naprosto zbytečné a kdyby jsi to nedělal, nemohly by problémy nastat. To že jde něco udělat ještě neznamená, že by se to tak dělat i mělo. |
||
ServIT Profil |
#11 · Zasláno: 8. 2. 2017, 09:58:01
Žádný problémy na stránce nenastaly, píšu snad o tom někde ?
Problém je se začleněním dynamicky vloženého kódu do debuggeru. Debugger má problém. Ptal jsem se, zda někdo neví o nějaké změně, nebo řešení, jak vložený kód vidět v debuggeru. Co je sakryš špatné na tom, že stránka je modulární, a každý PHP modul generuje i vlastní potřebný JS ? Pokud modul vkládám přes AJAX, holt musím přes AJAX vložt i JS. Je to NORMÁLNÍ POSTUP dle standardů, tak mne tu nepoučujte o tom, že je to špatně. Kdybych ten JS inlajnoval do ajaxovaného HTML a chtěl tady pomoct, tak mne můžete odkázat kam chcete, to je prostě pitomost, tak to ani asi nejde zfunkčnit ... jo, i to jsem kdysi davno zkoušel, a už to vím ... ale tady vkládám skript dle pravidel, on FUNGUJE, jen v případě problémů ho nevidí debugger .. tady vidí, ale neukáže. Když už mám jednou modulární projekt, nebudu ho kvůli chybě v debuggeru překopávat. A tímto tuhle diskuzi končím Díky za snahu |
||
_es Profil |
ServIT:
„ale tady vkládám skript dle pravidel“ A ako presne ho teda vkladáš? A podľa akých „pravidiel“? „Pokud modul vkládám přes AJAX, holt musím přes AJAX vložt i JS.“ Prečo by si „musel“? Veď ho môžeš vložiť „normálne“ ako <script> . A aj keď to chceš tvrdohlavo komplikovať miešaním JS kódu do AJAXu, tak aj element script sa dá vytvoriť dynamicky a vtedy by s debugovaním nemal byť problém.
|
||
Chamurappi Profil |
#13 · Zasláno: 8. 2. 2017, 13:39:50
Reaguji na ServITa:
AJAX sám o sobě se spouštěním skriptů nesouvisí. Jde o to, že <script> y vložené do stránky přes innerHTML se neinterpretují (na rozdíl od <script> ů vložených jinak, nebo od událostí v atributech). Pokud je nějak interpretovat potřebuješ, nejčistší by mi přišlo neposílat je jako součást HTML, ale někde vedle – tedy třeba poslat si ze serveru JSON, ve kterém bude zvlášť HTML náplň pro nějaký blok a zvlášť JS.
Nevím, jaký normální postup nyní používáš ke spuštění těch dotahovaných skriptů. Kdybys použil normální postup přes document.createElement("script") , s externím src nebo bez, nebo kdybys používal eval , nebo nějakou odnož eval u… přístup Firebugu k debugger u se může u různých postupů lišit. Jinými slovy v této otázce není rozhodující AJAX, ale to, jakým přesně způsobem spouštíš svůj JS.
|
||
ServIT Profil |
Scripty cpané ajaxem fungují ... je úplně jedno, jak ho vkládám. Protože proces vytváření toho JS, jeho vkládání a další modifikace stránky jsou součást většího celku a tudíž rozkouskované - něco tu, něco tam, není snadné to tu řešit a ukazovat .. zkusím to ..
používám www.the-art-of-web.com/php/ajax pro modifikace stránky. Stojí za to, pokud se chcte s ajaxem rochnit mrknout se, jak to funguje. Ta trivialita a zarážející a funkčnost naprostá. tento "command-ajax" (zpracování odpovědi je přímo součástí třídy, která ajax invokuje ) jsem rozšířil o vkládání JS. asi takto : switch(method) { case 'loadscript' var nscript = getNodeValue(commands[i], 'script'); var rel = getNodeValue(commands[i], 'rel'); var pageScript = document.getElementsByTagName('script')[0]; var mns = document.createElement('script'); mns.type = 'text/javascript'; mns.text = nscript; if( rel ) { mns.rel = rel; } pageScript.parentNode.insertBefore(mns, pageScript); break; tomuto "command-ajaxu" posílám <?xml version="1.0" encoding="UTF-8" standalone="yes"?> <response> <command method="setcontent"> <target>#itemdata</target> <content><![CDATA[<form name="jednotky"><table summary="detail položky" width="95%" rules="all" frame="box" class="itemdetail" > .... .... .... .... </table></form><div class="btn" > <span class="link btn save" onClick="save_me('2000')"> Uložit </span> </div>]]></content> </command> <command method="loadscript"> <script> function getProperty( elem, propname ) { if( elem.hasOwnProperty( propname ) ){; return elem[propname]; } else { return false; } } //# sourceURL='ajax.js' </script> </command> </response> Tento response je zkrácený text, který vidí firebug jako odpověď na XHR dotaz. A opět : toto není problém - problém je, že firebug vidí skript když dorazí, ale v debuggeru ho neukáže .. krokovat se tam dá, ale nevidím přitom kód... to je myslím vše ten comment //# sourceURL se má dát na konci bloku scriptu .. Ještě mne vtipně napadá ... nemám ten skript obalit CDATA ? |
||
_es Profil |
ServIT:
„jsem rozšířil o vkládání JS. asi takto“ Podľa doterajších reakcií sa zdalo, že si použil nejaké hotové riešenie s nejakým divným dynamickým vkladaním JS a nechceš „do toho vŕtať“ a ono to je naopak, pridal si to tam sám a vyrobil problémy, ktorým asi celkom nerozumieš. - Na čo takto dynamicky vkladáš funkciu getProperty ? Aký to má zmysel? Veď na nej nie je nič špeciálne, viazané na zvyšok odpovede servera - je všeobecná. Môže byť vložená normálne.
- Ako často je takéto dynamické vkladanie JS na stránke použité - odhadom do zavretia stránky? Ak často, tak to nie je vhodné. Je vkladaný nový element script pred všetky ostatné script y, prehliadač musí prerobiť celý DOM. Ak to nastane 1 000 krát, tak tam bude tých script ov 1 000. Ak tam vkladáš funkciu stále s rovnakým názvom, tak to spôsobí ďalšie problémy. Funkcia nebude predefinovaná, respektíve to možno v rôznych prehliadačoch môže vyrobiť rôzne odlišné problémy. Ako by mal podľa teba prehliadač spracovať viacero funkcií s rovnakým názvom? Možno v tom spočíva problém s debbugerom.
- Overil si si, ako funguje príkaz mns.text = nscript; v rôznych prehliadačoch? Mám pochybnosti o jeho funkčnosti.
|
||
ServIT Profil |
_es:,
za prvé : díky za některé připomínky, síce mi nepomohly, ale alespoň jsem zkusil jisté možnosti úpravy začleňování, které by mně bez tvého úsilí asi nenapadly .. ale nepomohlo to. za druhé : jsi zaseklý nebo co ? Píšu, že vložené skripty fungijí, IE, FF 2.0, FF24 až 50 - ostatní nepoužíváme, a nechci to ani řešit. TAKŽE SPECIELNĚ PRO TEBE : SKRIPTY VKLÁDANÉ AJAXEM MI FUNGUJÍ do stránky se vloží jen jednou, protože pokud volám editaci věty opakovaně, proměnná SESSION zabrání jeho vygenerování. Proč vkládám ? psal jsem, že stránka se generuje modulárně. při vytváření náhledu ( jakýsi základ ) se neví, co bude potřebovat modul pro vytváření formuláře ( jaké obslužné skripty ) . Skripty si modul formuláře generuje sám. Asi by to šlo celé rozkopat, ale nebudu to dělat. TAKTO TO FUNGUJE. TEČKA. a ono to je naopak, pridal si to tam sám a vyrobil problémy, ktorým asi celkom nerozumieš. Ten mnou upravený / přidaný kód "command-ajaxu" FUNGUJE. Je v projektu ( a v podobných projektech ) volán na mnoha místech pod různými záminkami a nikdy žáden problém s tímto nebyl. Ještě asi před rokem, kdy jsem debugger potřeboval, jsem viděl i ten vkládaný kód, dnes ne. Na co jsem se ptal, bylo : PROČ ? ZMĚNILO SE NĚCO V DEBUGGERU ? Předtím ( když to fungovalo ) bylo nutno přidat //@ sourceURL, pak se to změnilo na //# sourceURL, myslel jsem, že došlo opět k nějaké změně. Na čo takto dynamicky vkladáš funkciu getProperty |
||
Kajman Profil |
#17 · Zasláno: 10. 2. 2017, 12:30:07
ServIT:
Mně se poslední dobou firebug taky chová divně (musím ho tlačítkem zavřít a zase otevřít, abych vůbec viděl konzoli). Integrace je asi větší zásah a nemusí fungovat vše korektně. Co zkusit starší verzi firefoxu (např. esr) a firebugu? |
||
ServIT Profil |
#18 · Zasláno: 10. 2. 2017, 13:44:10
Kajman:
dík za reakci .. mám teď vše na openSuse, takže tam moc laborovat s verzemi nemůžu. Zkouším to i na BackTrack 3 ( ff2.0.18) a 4 ( ff 21) ve virtuálu, ale zrovna tohle jsem tam neřešil ... stáhl jsme i nový developer firefox 53, stejný problém. Tu starší verzi můžu vyzkoušet na starém notesu s XP, pak se podělím o poznatky nicméně překlep v kódu byl odstraněn, a už mně teď ten problém nějak netrápí, tak na to nespěchám. FF2 + FB1.0.28 ještě dynamické skripty neumí, a BT4 + FF21 (nebo kolik to tam je) jsem už dlouho nepouštěl, primární je pro mne verze 2 a aktuální, na těch to musí jet. |
||
Časová prodleva: 8 let
|
0