Forum » Programiranje » Javascript: Kako prekličem izvajanje Ajax zahtevka?
Javascript: Kako prekličem izvajanje Ajax zahtevka?
falconnn ::
Na stran sem preko ajax klica vključil podatke iz API druge strani. Podatki se naložijo, a je težav v tem, da je api bolj počasen in se ti nalagajo po par sekund. Če uporabnik ostane na strani in počaka, da se podatki naložijo, je vse ok, če se odloči pred koncem nalaganja obiskati kakšno drugo podstran, pa jo ne more, ker noben link na strani ne deluje. Takoj, ko se konča izvajanje JS oz. ajax zahevka, povezave zopet začenjo delovati. Obstaja kakšen način, da bi linki delovali tudi, če se JS še vedno izvaja? Vse skupaj je v bistvu zelo moteče zato vas prosim za pomoč.
Baja ::
uporabi async:true in bi morali linki delovati.
edit: typo
edit: typo
Zgodovina sprememb…
- spremenil: Baja ()
falconnn ::
Mislim, da je ta vrednost tako privzeta pri jquery. Sem jo za vsak slučaj še ročno nastavil, a žal to ne spremeni ničesar. Medtem ko JS čaka na podatke iz API, enostavno navadni link (< a >) ne delujejo (stran je drugače v celoti naložena). Recimo, ko kliknem na kakšnega, se ta realizira v trenutku, ko se podatki iz API naložijo in nič prej (se mi pa ob kliku nanj v brskalniku izpiše "Waiting for localhost..." in potem, ko se podatki naložijo, se preusmeri na link, ki sem ga pač kliknil - zelo moteče vse skupaj; če ne najdem rešitve, bom moral klic na api odstraniti iz strani).
Zgodovina sprememb…
- spremenilo: falconnn ()
hellboy123 ::
Kaj pa če prekličeš request?
var ajaxRequest = $.ajax({ ... }) .done(function(results) { // obdelaj rezultate ajaxRequest = null; }); $('a').on('click', function() { if (ajaxRequest !== null) { ajaxRequest.abort() } });
Zgodovina sprememb…
- spremenilo: hellboy123 ()
win64 ::
To bolj diši po tem, da ti strežnik blokira naslednji zahtevek, dokler se trenutni(ajax) ne izvede do konca.
Kateri strežnik uporabljaš?
Kateri strežnik uporabljaš?
falconnn ::
hellboy123 je izjavil:
Kaj pa če prekličeš request?
var ajaxRequest = $.ajax({ ... })
.done(function(results) {
// obdelaj rezultate
ajaxRequest = null;
});
$('a').on('click', function() {
if (ajaxRequest !== null) {
ajaxRequest.abort()
}
});
Tudi ne. "a click" ne zazna, dokler se ajax request do konca ne izvede, potem pa preverjanje/prekinjanje tako več ni smisleno.
To bolj diši po tem, da ti strežnik blokira naslednji zahtevek, dokler se trenutni(ajax) ne izvede do konca.
Kateri strežnik uporabljaš?
Verjetno bo to ja. Stran preverjam na localhost, nameščen imam WAMPSERVER 3.0.6 (Apache 2.4.23, PHP 7.0.10). Kje bi to lahko spremenil?
Zgodovina sprememb…
- spremenilo: falconnn ()
win64 ::
Za IIS ti lahko povem, da so zahtevki enonitni. Kar pomeni, da obdeluje eno nit naenkrat za sejo.
Za apache nimam dosti izkušenj. Morda ti bo kaj takega pomagalo:
https://stackoverflow.com/questions/350...
Za apache nimam dosti izkušenj. Morda ti bo kaj takega pomagalo:
https://stackoverflow.com/questions/350...
falconnn ::
Hvala za link. Sem nekaj na hitro poskusil s session_write_close(); ampak brez uspeha. Verjetno bi bilo res potrebno nekaj skonfigurirat pri Apache, da bi dovolil več vzporednih requestu (in ne zaporednih) za posameznega uporabnika ampak to tako nima smisla, ker gre za localhost. Če stran ne bo delovala na strežniku, ki ga imam zakupljenega, bom pač očitno primoran odstraniti ajax klice na ta API.
jernejl ::
Najbrž si session_write_close() poklical prepozno. Poklicati ga moraš še preden se začne izvajati del kode, ki dolgo traja.
Seveda potem ne smeš več spreminjati sejnih spremenljivk.
Seveda potem ne smeš več spreminjati sejnih spremenljivk.
keworkian ::
Z session_* ne bos mogel rešit zato ker to uporablja native PHP file, ki ga blokira naslednji request dokler se file handle ne sprosti od prejšnega.
Obscenities in B-Flat
kunigunda ::
Sej apache podpira vec vzporednih requestov. Za zacetek daj
<a>link na neko drugo stran, ker pomoje ti browser caka.
falconnn ::
Najbrž si session_write_close() poklical prepozno. Poklicati ga moraš še preden se začne izvajati del kode, ki dolgo traja.
Seveda potem ne smeš več spreminjati sejnih spremenljivk.
Sem poskusil pred, za, nič ni pomagalo.
Z session_* ne bos mogel rešit zato ker to uporablja native PHP file, ki ga blokira naslednji request dokler se file handle ne sprosti od prejšnega.
Očitno, mislim pa, da na strežniku kjer gostim vse deluje ok.
Zgodovina sprememb…
- spremenilo: falconnn ()
Vredno ogleda ...
Tema | Ogledi | Zadnje sporočilo | |
---|---|---|---|
Tema | Ogledi | Zadnje sporočilo | |
» | AJAX težavaOddelek: Programiranje | 1694 (1163) | tadejp81 |
» | [ajax] osnoveOddelek: Programiranje | 1060 (904) | Volk| |
» | [PHP/JavaScript] tic tac toeOddelek: Programiranje | 1662 (1395) | illion |
» | Download vsebine strani s JSOddelek: Izdelava spletišč | 2552 (1850) | MrBrdo |
» | java v javascript?Oddelek: Programiranje | 2053 (1756) | boss-tech |