Inicializace javascriptu po ajaxovém požadavku
- Lumeriol
- Generous Backer | 63
Zdravím,
chtěl bych se zeptat, jakým způsobem inicializovat externí javascript + jeho funkce, pokud se před tím invaliduje ajaxový požadavek.
Konkrétněji, mám stránku o třech záložkách (login, registrace, zapomenuté heslo), s tím, že člověk přijde na login (zde skript funguje, načte jej normálně z layout souboru), ovšem při ajaxovém přechodu na registraci se javascript již neinicializuje. To samé, pokud načtu přímo registraci, ale přepínám záložky pro doručovací / fakturační adresu, opět znefunkční skript.
Jedná se o plugin Smartform, která se inicializuje pomocí externího skriptu a poté krátkého kódu, vesměs podobné jako například TinyMCE.
<script src=„http://smartform.cz/api/v1/smartform.js“></script>
<script>
smartform.beforeInit = function initialize() {
smartform.setClientId('[zde doplňte klientské ID]');
}
</script>
Při vložení do snippetu naopak konzole řve „Failed to execute ‚write‘ on ‚Document‘: It isn't possible to write into a document from an asynchronously-loaded external script unless it is explicitly opened.“.
Tudíž jsem v tuto chvíli bezradný a rád bych požádal o radu, jak s tímto pohnout :)
- Lumeriol
- Generous Backer | 63
CZechBoY napsal(a):
Pokud používáš nette.ajax.js tak si udělej novou extension.
$.nette.ext('snippetSmartForm', { before: function () { unloadSmartForm(); }, success: function () { bindSmartForm(); } });
Tak jsem vyzkoušel tento, včetně dalších různých způsobů načtení skriptu, ale vždy skončím u chyby Failed to execute ‚write‘ on ‚Document‘: It isn't possible to write into a document from an asynchronously-loaded external script unless it is explicitly opened.
Nevím tak, zda je chyba přímo v připojovaném skriptu, kde mu vadí funkce document.write, nebo někde jinde. K funkci se v podstatě ani nedostanu.
- galab
- Backer | 74
Do @layout.latte dej:
<head>
....
<script src='http://smartform.cz/api/v1/smartform.js'></script>
<script>
smartform.beforeInit = function initialize() {
smartform.setClientId('[zde doplňte klientské ID]');
}
</script>
</head>
a pak extension:
$.nette.ext('snippetSmartForm', {
success: function () {
smartform.rebindAllForms(true);
}
});
Editoval galab (4. 12. 2015 15:44)
- Lumeriol
- Generous Backer | 63
galab napsal(a):
Do @layout.latte dej:
<head> .... <script src='http://smartform.cz/api/v1/smartform.js'></script> <script> smartform.beforeInit = function initialize() { smartform.setClientId('[zde doplňte klientské ID]'); } </script> </head>
a pak extension:
$.nette.ext('snippetSmartForm', { success: function () { smartform.rebindAllForms(true); } });
Díky moc, tohle funguje perfektně tak, jak má :)