Názory ke článku Ajax – 1. lekce
22. 7. 2008
Trosku v uvode mi chybalo vysvetlenie co to vlastne XMLHttpRequest objekt je a naco to je dobre.
Inak pekne a drzim palce v dalsom pokracovani.
23. 7. 2008
Alternativne riesenie:
function createXHR()
{
try { return new XMLHttpRequest(); } catch(e) {}
try { return new ActiveXObject("Msxml2.XMLHTTP.6.0"); } catch (e) {}
try { return new ActiveXObject("Msxml2.XMLHTTP.3.0"); } catch (e) {}
try { return new ActiveXObject("Msxml2.XMLHTTP"); } catch (e) {}
try { return new ActiveXObject("Microsoft.XMLHTTP"); } catch (e) {}
alert("XMLHttpRequest not supported");
return null;
}
zdroj s popisom: McGraw - Hill Ajax The Complete Reference 2008
Drzim palce v dalsom pokracovani ;o)
Reagoval na komentář od uživatele matik :
Tvoje riešenie je korektné, narozdiel od toho v článku.
Dôvod znova vysvetľovať nebudem, aj tak bude tento príspevok za chvíľu zmazaný, rovnako ako všetky predchádzajúce....
To autor článku:
Prestaň opisovať z knižiek chybné kódy, a nauč sa základy javascriptu. Miesto mazania kritizujúcich príspevkov si skús priznať chybu.
Reagoval na komentář od uživatele matik :
To udělá uplně to samé jak moje řešení, s tím rozdílem že já nastavení XHR jako AX udělám pomocí cyklu. Ale tohel je taky možné.
koukam, ze diskuze je zajimavejsi nez samotny clanek...i to se da povazovat za uspech....jen tak dal.....
Reagoval na komentář od uživatele Earl Cash :
To se sává i vlepších rodinách. Můžu slyšet ještě tvůj názor na moje řešení prosím?
Reagoval na komentář od uživatele Petr Láslo :
O debatu som sa pokúsil, skúsim znova...
konflikt sa tyka tejto konštrukcie:
for( ... ; podmienka ; ... )
{
try { operacia ; }
catch(e) {}
}
tvrdim, že kod sa bude opakovať kým bude splnená podmienka, bez ohľadu na to, či operacia v koštrukcii try bude uspešná, alebo nie.
Týka sa to tohto kódu:
for(var i = 0; i < MSXmlVerze.lenght; i ++){
try{
xhr = new ActiveXObject(MSXmlVerze[i]);
}catch(e){
//vzniklou chybu ignoruji a pokračuji nastavením další verze
}
}
pri každom iterovaní sa stane to:
- ak sa podarí vytvoriť objekt tak sa priradí do premmennej xhr
- ak sa nepodarí, tak sa vykoná prázdny blok catch(e) {}
- bez ohľadu na úspešnosť/neúspešnosť, sa bude iterovať ďalej, až po poslednú verziu, ktorá podporvaná je. Takže nakoniec bude v xhr objekt poslednej verzie zo zoznamu.
v prípade, že browser podporuje poslednú verziu (čo podporuje) je kód ekvivalentný s týmto:
xhr = new ActiveXObject(MSXmlVerze[MSXmlVerze.length-1]);
Tvoj argument bol, že try -catch ktorý je v cykle, tento cyklus ukončí po úspešnom vykonaní bloku try.
Pýtam sa: ktorá časť definície javascriptu o tom hovorí??? Resp. žiadal som ťa, aby si si ten kód prešiel cez debug.
Reagoval na komentář od uživatele Prog. :
Tak teď jsem to zkoušel prohnat přes JavaScript debugger, nic, žádný problém.
Reagoval na komentář od uživatele Petr Láslo :
Jou, tak som si skúsil ja spustiť tie tvoje zdrojáky, ..čoraz ďalej je to väčšia sranda...
Fakt si si to skúsil pustiť? Nemyslím na IE7, ale na starších... ...vôbec to nefunguje, lebo:
1. tie definície activeX objektov v poli MSXmlVerze sú... nesprávne,... neviem, mne ich IE6 ani IE5.5 neberú, zato tie od matik sú v pohode... Čo tak nájsť originálny zdroj ich definície?
2. ten cyklus pre hľadanie najnovšej verzie sa ti nikdy nespustí, je tam totiž chyba - prehodené písmenká MSXmlVerze.lenght
3. spomínaný problém s algoritmom, ktorý mi nechceš uveriť. Možno pomôže toto:
function vytvorXHR()
{
var xhr;
var verze = null;
try
{
alert('Skusam: XMLHttpRequest()');
xhr = new XMLHttpRequest();
verze = 'object XMLHttpRequest';
alert('OK');
}
catch(e)
{
alert('CHYBA!');
var MSXmlVerze = ['MSXML2.XMLHTTP.5.0',
'MSXML2.XMLHTTP.4.0',
'MSXML2.XMLHTTP.3.0',
'Msxml2.XMLHTTP',
'Microsoft.XMLHTTP'];
for(var i = 0; i < MSXmlVerze.length; i++)
{
try
{
alert('Skusam: '+MSXmlVerze[i]);
xhr = new ActiveXObject(MSXmlVerze[i]);
verze = 'activeX '+MSXmlVerze[i];
alert('OK');
/* tu chýba break; */
}
catch(e)
{
alert('CHYBA!');
//vzniklou chybu ignoruji a pokračuji nastavením další verze
}
}
}
if(!xhr)
{
alert("Chyba!");
return null;
}
alert('Vytvoreny: '+verze);
return xhr;
}
btw, microsoft odporúča použiť iba MSXML2.XMLHTTP.3.0 http://msdn.microsoft.com/en-us/library/ms535874.aspxv prípade že to znova nepochopíš prosím zváž príspevky tohto typu. Nerýpal som, len sa mi dosť nepáčilo, že si zmazal niečo, čo začiatočníkov mohlo aspoň trocha nasmerovať pri problémoch, do ktorých by sa dostali tvojím "ztrateným informatívnym charakterom"...
Tak se tedy omlouvám, byla to moje chyba. Kódy jsem upravil. Omlouvám se tedy. V tý knize ze které jsem se vše učil je vážně chyba a já inofrmacem v ní opravdu věřil. Děkuji