Ajax nefunguje při každém requestu, každý druhý je ne-ajaxový
- Semik
- Backer | 135
Zdravím. Používám komponentu NiftyGrid (https://componette.org/search/?…) a ajax nefunguej při každém requestu. Po každém ajaxovém requestu proběhne jeden normální. První request tedy udělá něco co zabrání tomu dalšímu a normální request do logicky neutralizuje.
Nevíte co by to mohlo způsobovat ?
„PHP 5.4.4 | Apache/2.4.2 (Win32) PHP/5.4.4 | Nette Framework 2.0.12
(released on 2013–08–08)“
JQuery 1.10.2, netteForms, twitter bootstrap
- jiri.pudil
- Nette Blogger | 1029
On možná odkaz pořád má ajaxovou třídu, ale už nemusí mít navěšené handlery pro patřičné události (zjistíš snadno ve vývojářských nástrojích prohlížeče). Pokud je to tak, zkus přepsat to navěšování události na document, tzn. místo:
$('.selector').on('click', handler);
takto:
$(document).on('click', '.selector', handler);
- Semik
- Backer | 135
Máte recht, chrome dev tools ukázal že je nemá. Přepsáno na document a již funguje.
Díky za rady.
jiri.pudil napsal(a):
On možná odkaz pořád má ajaxovou třídu, ale už nemusí mít navěšené handlery pro patřičné události (zjistíš snadno ve vývojářských nástrojích prohlížeče). Pokud je to tak, zkus přepsat to navěšování události na document, tzn. místo:
$('.selector').on('click', handler);
takto:
$(document).on('click', '.selector', handler);
- Semik
- Backer | 135
Nicméně stále ještě nefunguje dobře jedna věc a to zaškrtávání přes select-all. Opět zaškrte a odškrtne jen jednou, poté nereaguje. I bez předchozí requestu.
Nejspíš asi bude chyba v:
$(document).on("click", ".grid-select-all", function() {
var checkboxes = $(this).parents("thead").siblings("tbody").children("tr:not(.grid-subgrid-row)").find("td input:checkbox.grid-action-checkbox");
if($(this).is(":checked")){
$(checkboxes).attr("checked", "checked");
}else{
$(checkboxes).removeAttr("checked");
}
});
Edit: Tak tím to nejspíš nebude. Poprvé to atribut přidá a odebere, při dalším kliku už nepřidá (ověřeno v ChromeDevTools).
Editoval Semik (14. 9. 2013 14:52)
- MzK
- Člen | 127
Zrovna s tímto bojuji: Jak a kam mohu zapsat
<script>
$(document).on('click', '.selector', handler);
</script>
když v tom handler má být něco jako?
<script>
$(this.linkSelector).off('click.nette', rh).on('click.nette', rh);
</script>
Tuším, že by se to hodilo za snippets.after ale tam nemám proměnnou rh (requestHandler)
A když to zkouším přes:
<script>
snippets.after(function ($el) {
$el.find('form').each(function () {
window.Nette.initForm(this);
});
//console.log($el.find('a.ajax'));
$el.find('a.ajax').each(function () {
$(this).on('click', function(payload) {
$.nette.success(payload);
});
});
});
</script>
Tak spippety stejně nemají daný eventy a další click na odkaz už není Ajaxový :-(
Když dám místo: $.nette.success(payload); prosté $.get(this.href);, tak se sice odešle ajaxový požadavek, vrátí se snippety, ale ty se nikde nenahradí v šabloně.
Pls o nakopnutí, kam vecpat jakou metodu, aby se na nově přijaté
snippety navěsily eventy pro class=ajax na clicknutí.
jQuery 1.10.2.
Nette: 2.1.0-RC4
- Gaprielko
- Člen | 42
tak ja riesim rovnaky problem a tiez si neviem rady.. tiez som zistil, ze to nenaviazanie handlerov mi suvisi s tym, ze ci na vkladany HTML fragment pouzijem fade effekt, alebo nie.. pokial ho nepouzijem, ajax mam pri kazdom poziadavku, ak fade pouzijem, ide to chybne.
Dalej, mozno to s tym nejako suvisy, ale ked mam odkaz, ktorym ajaxovo vlozim nejaky HTML fragment s tym, ze dany odkaz nie je prekresleny (je mimo fragmentu), tak spinner zobrazovany po kliknuti mi nezmizne (nevykona sa complete). Ale ak na vkladany HTML fragment pouzijem fade efekt (hoc len 1ms dlhy), tak complete sa vykona a spinner zmizne.. ovsem dalsi request z vlozeneho HTML fragmentu je neajaxovy
Dostal som sa tak do kruhu, bud pouzijem fade efekt a spinner mi zmizne, ale nepojde dalsi request ajaxovo, alebo nepouzijem fade a spinner mi nezmizne, no som ajaxovy :)
Vie niekto poradit, co s tym? Tento problem mam, ako pisem vyssie, len ked odkaz na ktory klikam nie je prekresleny novym HTML fragmentom.
Editoval Gaprielko (13. 1. 2014 11:37)
- Gaprielko
- Člen | 42
este doplnim.. ak pouzivam fade efekt, tak snippet complete sa nevykona.. v skripte to mam takto:
<script>
$.nette.ext('snippets').applySnippet = function ($el, html) {
// fade effect
if ($('.ajax-fade '+$el.selector).exists()) {
$el.fadeTo("fast", 0.01, function () {
$el.html(html).fadeTo(200, 1);
});
} else {
$el.html(html);
}
};
$.nette.ext('snippets').complete(function (payload) {
$.nette.load();
alert('snippet complete');
// initialize all forms for live validation
payload.find('form').each(function() {
Nette.initForm(this);
});
});
</script>