Přidat otázku mezi oblíbenéZasílat nové odpovědi e-mailem okamžité zastavení všech scriptů - jquery

Ahoj, v jednom webovém projektu mám tabulku a když si user otevře tuto stránku s tabulkou, tak se spustí jquery a pomocí each cyklu a fce get začne načítat nějaká data a doplňovat do tabulky. Vše funguje, ale když chce user např přejít na další stránku tabulky a klikne v paginatoru, tak stránka nereaguje (nebo hodně opožděně), dokud se nedokončí ten each cyklus co načítá doplňující data do tabulky...

Nevíte jak po kliku zrušit v jquery všechny probíhající scripty? Díky

Předmět Autor Datum
Spíš bych zapřemýšlel, jak to vyřešit jedním GETem, aby se jich nevolalo tolik.
Wikan 06.05.2016 09:52
Wikan
no, teoreticky by to jedním getem šlo ale čekalo by se dlouho na výsledek a user by si myslel že se…
n.u.r.v. 06.05.2016 09:59
n.u.r.v.
I s více GETy by to ale nemělo trvat nijak zvlášť dlouho. Pošleš všechny GETy a pak už jenom čekáš n…
Wikan 06.05.2016 10:38
Wikan
No koukal jsem se ve firefoxu do konzole (firebug) a vidím tam jak se pošle všechny požadavky do php…
n.u.r.v. 06.05.2016 12:43
n.u.r.v.
Použitie session blokuje ďalšie požiadavky používajúce tú istú session. Skús sa vyhnúť session (napr…
los 06.05.2016 21:01
los
j, díky -to bude ta session... Zkusím vymyslet jiné řešení...
n.u.r.v. 09.05.2016 09:15
n.u.r.v.
Zkusil bych si na straně PHP změřit, kolik času zabere čekání na odpověď od externí služby. Obávám s…
hynajs 09.05.2016 10:32
hynajs
Ahoj, no to je ten problém - služba může odpovědět za sekundu nebo i za 17 sekund.. A někdy odpoví b…
n.u.r.v. 09.05.2016 13:17
n.u.r.v.
Aby tato aplikace spolehlivě sloužila, napadají mě jen dvě cesty: - prověřit, zda přistupuješ k této…
hynajs 09.05.2016 15:15
hynajs
Ahoj, jedná se o ins. rejstřtík - https://isir.justice.cz/isir/common/stat.do?kodStr anky=SLEDOVANIW…
n.u.r.v. 11.05.2016 14:54
n.u.r.v.
SOAPClient v PHP je najhoršia implementácia SOAP klienta, akú som mal možnosť kedy vidieť. Osobne by…
los 11.05.2016 23:19
los
Hmm, zkusil jsem ten curl a je to rychlejší (ale dnes jde rychle i soap - asi je to tím že je pátek…
n.u.r.v. 13.05.2016 14:16
n.u.r.v.
Pri prístupe cez curl sa pracuje s reťazcami. To znamená, že výstup si musíš rozparsovať sám. Na roz… poslední
los 14.05.2016 09:42
los

no, teoreticky by to jedním getem šlo ale čekalo by se dlouho na výsledek a user by si myslel že se nic neděje - na jedné stránce je v tabulce 20 řádků - načítání dodatečné informace trvá cca 1-15 sekund (záleží na externí službě... get dá požadavek mé php aplikaci - předá id řádku, php aplikace přes soap načte z externí služby info, uloží do session a předá výsledek javascriptu)...

Použitie session blokuje ďalšie požiadavky používajúce tú istú session. Skús sa vyhnúť session (napr. použitím memcached alebo databázy) a bude to rýchlejšie.

Možno to môžeš optimalizovať aj inak, to ale závisí od konkrétneho prípadu (napr. radiť požiadavky do queue, o ktorej obsluhu sa bude starať iný proces, a výsledky zobrazovať len jedným GET-om, ktorý bude obsahovať všetky odpovede naraz).

Zkusil bych si na straně PHP změřit, kolik času zabere čekání na odpověď od externí služby.
Obávám se, že tahle hodnota bude rozhodující, protože naplnit dvacet řádků tabulky Ajaxem (i když nevím, kolik sloupců) by nemělo být vražedně pomalé.
Pak by byla každá rada drahá. Možná zvážit ukládání vyřízených výsledků (pokud se data nemění a nevadilo by to poskytovali SOAP). Záleží na konkrétní situaci.

Ahoj, no to je ten problém - služba může odpovědět za sekundu nebo i za 17 sekund.. A někdy odpoví bad getaway a to mi to klekne celé (dokonce se pak musím znovu přihlásit v php app).

Jinak to ukládání do session je jen kvůli tomu, když user překlikává jednotlivé stránky tabulky, tak aby se již jednou načtené řádky znovu negenerovaly požadavek přes soap... Zkusím to místo do session ukládat do DB...

Teď jsem si zkusil skript pro načítání dat ze soap dát do úplně samostatného php (abych otestoval že mi tam nezlobí ještě něco jiného) a dal požadavek na 10 vzorků - 3 x to prošlo relativně rychle (1-2 sekundy na požadavek), ale při dalším pokusu to na třetím vzorku padlo...

Jinak jsem koukal do logu a někdy dostávám tuto chybu: SoapFault Error Fetching http headers

Tak a teď jak to celé ošetřit aby to nepadlo, resp. když soap nic nevrátí, tak aby mě php alespoň vypsalo nějakou chybu...

Aby tato aplikace spolehlivě sloužila, napadají mě jen dvě cesty:
- prověřit, zda přistupuješ k této SOAP službě korektně (třeba službu voláš nesprávně nebo porušuješ nějaké zásady poskytovatele)
- dostat data k sobě do databáze (nevím, zda je možné legálně a jak často se data mění)

SOAPClient v PHP je najhoršia implementácia SOAP klienta, akú som mal možnosť kedy vidieť. Osobne by som radšej použil curl, aby som sa vyhol všetkým bugom v implementácii a chybám v návrhu SOAPClienta.

Chyba "SoapFault Error Fetching http headers" môže byť spôsobená tým, že sa znovupoužíva spojenie, ktoré ale bolo serverom už zavreté. Opraviť by to malo nastavenie možnosti keep_alive v SOAPClientovi na false.

Keď volanie SOAPClient-a spadne, tak by mala nastať výnimka, ktorú si schopný odchytiť klasicky pomocou try..catch.

Blokovaniu kvôli session by si sa mohol vyhnúť tak, že session naštartuješ pred prijatím odpovede, zistíš, či ju máš nakešovanú a hneď ju zavrieš. Po prijatí odpovede znovu naštartuješ session, zapíšeš výsledok a hneď ju zavrieš (session_write_close).

Hmm, zkusil jsem ten curl a je to rychlejší (ale dnes jde rychle i soap - asi je to tím že je pátek :-) )

Ale mám problém že mi to nevrátí xml (nebo jinou použitelnou strukturu), ale vratí mi to string bez mezer. Nevíš proč?

Takto to mám teď:

function getISIRStatus($ico) {
  $request = '<soapenv:Envelope xmlns:soapenv="http://schemas.xmlsoap.org/soap/envelope/" xmlns:typ="http://isirws.cca.cz/types/">
   <soapenv:Header/>
   <soapenv:Body>
      <typ:getIsirWsCuzkDataRequest>
         <ic>'.$ico.'</ic>
      </typ:getIsirWsCuzkDataRequest>
   </soapenv:Body>
  </soapenv:Envelope>';
  
  $url = "https://isir.justice.cz:8443/isir_cuzk_ws/IsirWsCuzkService";
  $headers = array(
    "Accept-Encoding: gzip,deflate",
    "Content-Type: text/xml;charset=UTF-8",
    "Content-length: ".strlen($request),
    "Host: isir.justice.cz:8443",
    "Connection: Keep-Alive",
  );
  $ch = curl_init();
  curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, 0);
  curl_setopt($ch, CURLOPT_URL, $url);
  curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
  curl_setopt($ch, CURLOPT_TIMEOUT, 10);
  curl_setopt($ch, CURLOPT_POST, true);
  curl_setopt($ch, CURLOPT_POSTFIELDS, $request); // the SOAP request
  curl_setopt($ch, CURLOPT_HTTPHEADER, $headers);
  $response = curl_exec($ch); 
  curl_close($ch);
  return $response;            
}

Můžete si to vyzkoušet - jako parametr je string české IČO

Díky

Zpět do poradny Odpovědět na původní otázku Nahoru