Autor Zpráva
Suta
Profil
Předem uvádím, že kód je vytvořen pouze pro ilustraci (jednoduše můžete vyzkoušet), nicméně naprosto funkční.
Příklad můžete zkusit také přímo zde: www.petrzavicak.cz/pz/00/

<script type="text/javascript">

function createXMLHttpRequest() {
    return new XMLHttpRequest(); // (spi sladce, IE6, a pozdravuj prarodiče)
}

var xhReq = createXMLHttpRequest();

xhReq.open("get", "connectionMonitor.php", true);

var requestTimer = setTimeout(function() {

    xhReq.abort();
    
    alert("Zavolal jsem metodu shReq.abort() - v konzoli je chybova hlaska, proc?");
    
}, 3000);

xhReq.onreadystatechange = function() {

    if (xhReq.readyState != 4)  { return; }

    clearTimeout(requestTimer);

    if (xhReq.status != 200)  { return; }

    var serverResponse = xhReq.responseText;

    alert(serverResponse);
};

xhReq.send(null);

</script>


// soubor connectionMonitor.php
<?php
header("Cache-Control: no-cache");
header("Expires: Fri, 20 Oct 1998 14:19:41 GMT");

header("Content-Type: text/plain");

sleep(11);

echo "Kozel String, těší mě.";
?>


1. Pokud do tří vteřin nepřijde od serveru odpověď, je shReg zrušen metodou xhReq.abort();
2. Server pochopitelně do tří vteřin neodpoví, protože si schrupne celých 11 vteřin, a zavolání metody abort() vyvolá chybu v konzoli prohlížeče:

Chrome: Failed to load resource - connectionMonitor.php
Firefox: Aborted - connectionMonitor.php
IE: chybu nezahlásí žádnou (?)

Očividně se tedy jedná o volání metody abort() - kde je chyba? Hledal jsem tři hodiny na internetu vše kolem volání této metody, nikde se nepíše o mnou uvedeném problému.

Pozn.: pokud v uvedeném .php souboru smažu řádek s uspáním serveru ( sleep(11) ), server odpoví, prohlížeč odpověď v pořádku obdrží a zruší časovač.

Díky za pomoc a radu.
Chamurappi
Profil
Reaguji na Sutu:
return new XMLHttpRequest(); // (spi sladce, IE6, a pozdravuj prarodiče)
Odrovnáš tím i novější Explorery, které mají v nastavení vypnutý nativní XMLHttpRequest. (Kupodivu existují takoví uživatelé — jejich motivaci neznám.)

Očividně se tedy jedná o volání metody abort() - kde je chyba?
Podle popisu si myslím, že to není chyba, ale obyčejná informace, že se přerušilo spojení.
V konzoli Firefoxu žádnou hlášku nevidím. Ve Firebugu se „Aborted“ ukazuje, protože máš zapnuté sledování XMLHttpRequestů (to je výchozí nastavení) a zrovna tenhle XMLHttpRequset byl prostě přerušen.
Suta
Profil
Chamurappi:
Odrovnáš tím i novější Explorery, které mají v nastavení vypnutý nativní XMLHttpRequest.
O tom jsem nevěděl. Co přesně myslíš tím odrovnáním? Pokud je XMLHttpRequest vypnutý, pak by mělo být jedno, jakým způsobem probíhá pokus o jeho vytvoření. Oprav mě, pokud se pletu.
Chamurappi
Profil
Reaguji na Sutu:
Tools / Internet Options / Advanced / Security / Enable native XMLHTTP support (v anglickém Internet Exploreru 7)
— když zrušíš odškrtnutí, vypneš tím nativní XMLHttpRequest, ale původní postup s ActiveXObjectem funguje pořád. Tipnul bych, že to mají někteří lidé vypnuté kvůli skriptům z doby před vznikem Exploreru 7, které počítaly, že co umí XMLHttpRequest, to je Mozilla a co je Mozilla, to umí i něco dalšího, co Explorer neumí (třeba overrideMimeType)… ale to je jen odhad.

Vaše odpověď

Mohlo by se hodit

Neumíte-li správně určit příčinu chyby, vkládejte odkazy na živé ukázky.
Užíváte-li nějakou cizí knihovnu, ukažte odpovídajícím, kde jste ji vzali.

Užitečné odkazy:

Prosím používejte diakritiku a interpunkci.

Ochrana proti spamu. Napište prosím číslo dvě-sta čtyřicet-sedm:

0