» »

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

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…

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š?

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.

win64 je izjavil:

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...

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.

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 ::

jernejl je izjavil:

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.

keworkian je izjavil:

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 ...

TemaSporočilaOglediZadnje sporočilo
TemaSporočilaOglediZadnje sporočilo
»

AJAX težava

Oddelek: Programiranje
121694 (1163) tadejp81
»

[ajax] osnove

Oddelek: Programiranje
61060 (904) Volk|
»

[PHP/JavaScript] tic tac toe

Oddelek: Programiranje
171662 (1395) illion
»

Download vsebine strani s JS

Oddelek: Izdelava spletišč
472552 (1850) MrBrdo
»

java v javascript?

Oddelek: Programiranje
212053 (1756) boss-tech

Več podobnih tem