Autor | Zpráva | ||
---|---|---|---|
JD Profil * |
#1 · Zasláno: 16. 2. 2009, 14:29:18
Pracuji s knihovnou jQuery. Ajaxový požadavek volám přibližně takto
proměnná = $.ajax({ method: ... , url: ... , data: ... beforeSend: ... success: function(html){ ... } }); Pokud opustí kurzor myši daný prvek, chci volání ajaxu stornovat, to dělám následovně: $('.prvek').bind( 'mouseout', function() { promenna.abort(); }); měl jsem za to, že by to mělo fungovat, ale zdá se, že ne. Máte někdo nějaké zkušenosti? Poradíte? |
||
JD Profil * |
#2 · Zasláno: 16. 2. 2009, 22:10:55
Lidi nemáte někdo zkušenosti aspoň se stornováním požadavku klasického javascriptového ajaxového volání, ne nutně přes jQuery? Na netu k tomuhle moc kloudného napsáno není.
|
||
joe Profil |
#3 · Zasláno: 16. 2. 2009, 22:17:43
Nejsem si jistý, ale podlě mě když odešleš požadavek, tak to už nijak nestornuješ, maximálně ho nemusíš přijímat, ale požadavek se bude dokončovat - odesíláš přece požadavek na server, takže nevím jak bys ho chtěl stornovat / zrušit.
|
||
JD Profil * |
#4 · Zasláno: 16. 2. 2009, 22:21:02
požadavek jako takový asi nestornuješ, ale dá se zahodit buffer, do kterého se ukládá příjem ze serveru, jde totiž o to, že ukládám výsledek do jednoho boxu, obsah je takový podle toho, na jaké položce jsi a když změníš položku a přijde obsah té staré ještě před načtením té nové, tak je v tom boxu špatný obsah (on se samozřejmě třeba za vteřinu přehraje správným obsahem, ale může to být matoucí)
|
||
joe Profil |
#5 · Zasláno: 16. 2. 2009, 22:30:17 · Upravil/a: joe
JD
Už chápu tvé úmysly. Pak bych to asi řešil tak, že bych si do nějaké proměnné ukládal aktivní položku (tu na které je kurzor) a před změnou textu v tom boxu bych ověřil, jestli se už nemá načítat něco jiného než přišlo. Nevím jak na to v jQuery, nepoužívám ho a zdá se mi zbytečný. Ale myslím, že jednoduchou podmínkou toho lze docílit. EDIT: ale třeba někdo chytřejší poradí líp :-) |
||
JD Profil * |
#6 · Zasláno: 16. 2. 2009, 23:12:44
Jj, uvažoval jsem přesně stejně, problém zase je, že jsem to napsal
$('.prvek').bind( 'mouseenter', function() { activeEl = this; }); $('.prvek').bind( 'mouseout', function() { activeEl = null; }); success: function (prvek na kterém jsem) { if(prvek na kterém jsem == activeEl) proveď kód } jenže, to má taky ty samé mouchy, protože ta fce se zavolá až na úspěch, tzn. v tu dobu "Prvek na kterém jsem" se nebude rovnat prvku na kterém se zavolalo Ajaxové volání (pokud tedy myší zajedu na jiný prvek) |
||
Chamurappi Profil |
#7 · Zasláno: 17. 2. 2009, 13:02:40
Reaguji na JD:
Posílej v odpovědi ze strany serveru i vstupní parametry a prověřuj při zpracování té odpovědi v prohlížeči, jestli stále platí podmínky, při nichž byl požadavek vyslán. |
||
JD Profil * |
#8 · Zasláno: 17. 2. 2009, 14:11:22
Děkuju, tohle asi bude nakonec nejlepší i nad tímhle řešením jsem přemýšlel, jen se mi nechtělo vrtat zbytečně v PHP části, když by měl jít Ajax abortnout, ale s tím abortem asi vážně nikdo zkušeností moc nemá a na netu toho moc není, takže mi asi nic jiného nezbyde.
|
||
Časová prodleva: 15 let
|
0