Autor Zpráva
ServIT
Profil
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
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
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
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
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
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?
ServIT
Profil
_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
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
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
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
Žá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
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ž evalu… přístup Firebugu k debuggeru 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é scripty, prehliadač musí prerobiť celý DOM. Ak to nastane 1 000 krát, tak tam bude tých scriptov 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š.
máš nějakou posedlost ? NEROZUMIEM AKORÁT TOBĚ.
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
je to obecná funkce nutná pro další použití Neni to to jediné, co tam v tomto případě vkládám. Psal jsem ŽE POSKYTNUTÝ VÝPIS JE ZKRÁCENÁ VERZE . Naco sem do příspěvku budu ládovat 10k kódu ?
Kajman
Profil
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
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.

Vaše odpověď

Mohlo by se hodit

Neumíte-li správně určit příčinu chyby, vkládejte odkazy na živé ukázky.
Užíváte-li nějakou cizí knihovnu, ukažte odpovídajícím, kde jste ji vzali.

Užitečné odkazy:

Prosím používejte diakritiku a interpunkci.

Ochrana proti spamu. Napište prosím číslo dvě-sta čtyřicet-sedm:

0