www.wikidata.uk-ua.nina.az
XMLHttpRequest API zapit vebkliyenta brauzera do vebservera za protokolom HTTP u fonovomu rezhimi dlya mov programuvannya JavaScript JScript VBScript i podibnih Vikoristovuyetsya dlya sinhronnogo abo asinhronnogo obminu informaciyeyu v dovilnomu tekstovomu formati napriklad XML JSON HTML Dozvolyaye zdijsnyuvati HTTP zapiti do viddalenogo servera bez potrebi perezavantazhuvati storinku Zastosuvannya XMLHttpRequest spravlyaye vrazhennya mittyevoyi vidpovidi servera u porivnyanni z klasichnimi metodom perezavantazhennya vsiyeyi storinki dlya onovlennya predstavlenoyi na nij informaciyi XMLHttpRequest ye nevid yemnoyu chastinoyu tehnologiyi AJAX i vikoristovuyetsya bagatma sajtami dlya stvorennya dinamichnih vebzastosunkiv sho shvidko reaguyut na zapiti koristuvacha Napriklad XMLHTTP vikoristovuyetsya takimi sajtami yak Gmail Google Suggest MSN Virtual Earth ta inshimi XMLHTTP pracyuye lishe z fajlami roztashovanimi na tomu zh domeni z yakoyi zavantazheno storinku Yak i u vipadku JavaScript ce zrobleno z metoyu zabezpechennya bezpeki koristuvacha yak zahist vid ataki sho maye nazvu mizhsajtovi scenariyi angl cross site scripting Zmist 1 Istoriya 2 Metodi klasu XMLHttpRequest 3 Vlastivosti klasu XMLHttpRequest 4 Priklad vikoristannya 4 1 Stvorennya ekzemplyara klasu XMLHttpRequest 4 2 Ustanovlennya obrobnika podiyi 4 3 Vidkrittya z yednannya i vidpravlennya 4 4 Pidsumkovij kod 5 Koduvannya 6 Vidomi problemi 6 1 Problema z keshuvannyam v Microsoft Internet Explorer 6 2 Povtorne vikoristannya ob yekta XmlHttpRequest 6 3 Vitoki pam yati 7 Obmezhennya bezpeki 7 1 Kross domennij XMLHttpRequest 7 2 Proksi 7 3 Vikoristannya naddomenu 7 4 V plaginah Google Chrome 8 Primitki 9 Div takozh 10 PosilannyaIstoriya RedaguvatiVpershe buv realizovanij kompaniyeyu Microsoft z yavivshis v Internet Explorer 5 0 u viglyadi ob yekta ActiveX dostupnogo cherez JavaScript JScript VBScript skriptovi movi sho pidtrimuyutsya brauzerom Programisti proektu Mozilla potim rozrobili sumisnu versiyu pid nazvoyu XMLHttpRequest 1 v Mozilla 1 0 Nadali cya mozhlivist takozh bula realizovana kompaniyami Apple pochinayuchi z Safari 1 2 sporidnenim brauzerom Konqueror kompaniyeyu Opera Software pochinayuchi z Opera 8 01 i jmovirno inshimi Oskilki originalnij XMLHttpRequest v IE5 ta IE6 ye ob yektom ActiveX jogo nemozhlivo rozshiriti dodavshi novi vlastivosti i metodi sho inodi ye nezruchnim obmezhennyam Ce obmezhennya bulo znyato v realizaciyi Mozilla XMLHttpRequest ye povnocinnim ob yektom JavaScript Pochinayuchi z IE7 Microsoft tezh pochav dotrimuvatisya rekomendovanogo w3c viznachennya zapitu Metodi klasu XMLHttpRequest RedaguvatiMetod Opisabort skasovuye potochnij zapitgetAllResponseHeaders povertaye povnij spisok HTTP zagolovkiv u viglyadi ryadkagetResponseHeader headerName povertaye znachennya vkazanogo zagolovkaopen method URL async userName password viznachaye metod URL i inshi neobov yazkovi parametri zapitu parametr async viznachaye chi vidbuvayetsya robota v asinhronnomu rezhimisend content vidpravlyaye zapit na serversetRequestHeader label value dodaye HTTP zagolovok do zapituoverrideMimeType mimeType dozvolyaye vkazati MIME tip dokumenta yaksho server jogo ne peredav abo peredav nepravilno Uvaga metod vidsutnij v Internet ExplorerVlastivosti klasu XMLHttpRequest RedaguvatiVlastivist Opisonreadystatechange obrobnik podiyi yaka vidbuvayetsya pri kozhnij zmini stanu ob yekta neobhidnij dlya asinhronnogo rezhimu readyState povertaye potochnij stan ob yekta 0 ne inicializovano 1 vidkrito 2 vidpravlennya danih 3 otrimannya danih i 4 dani zavantazheno responseText tekst vidpovidi na zapitresponseXML tekst vidpovidi na zapit v viglyadi XML kotrij piznishe mozhe buti rozibranij metodami DOMstatus povertaye HTTP stan u viglyadi chisla 404 Not Found Ne najdeno 200 OK tosho statusText povertaye stan u viglyadi ryadka Not Found OK tosho Priklad vikoristannya RedaguvatiPlan roboti z ob yektom XMLHttpRequest mozhna predstaviti tak Stvorennya ob yekta XMLHttpRequest Vstanovlennya dlya nogo obrobnika podiyi onreadystatechange Vidkrittya z yednannya z vkazivkoyu tipu zapitu URL i inshih parametriv Bezposeredno vidpravlennya zapitu Stvorennya ekzemplyara klasu XMLHttpRequest Redaguvati Pershij punkt stvorennya ekzemplyara klasu XMLHttpRequest Konstrukciya stvorennya ob yekta vidriznyayetsya v zalezhnosti vid versiyi brauzera u IE 5 ta IE 6 vona realizovana cherez ActiveXObject a v reshti brauzerah IE 7 Mozilla Opera Netscape i Safari yak vbudovanij ob yekt tipu XMLHttpRequest Otzhe viklik dlya rannih versij Internet Explorer var req new ActiveXObject Microsoft XMLHTTP U rannih versiyah Internet Explorer do IE7 rekomenduyetsya vikoristovuvati var req new ActiveXObject Msxml2 XMLHTTP i dlya reshti var req new XMLHttpRequest Tobto dlya zabezpechennya kross brauzernosti nashogo kodu potribno lishe pereviryati nayavnist ob yektiv window XMLHttpRequest i window ActiveXObject i zastosovuvati prisutnij Yak universalne rishennya proponuyetsya vikoristannya nastupnoyi funkciyi function createRequestObject if window XMLHttpRequest try return new XMLHttpRequest catch e else if window ActiveXObject try return new ActiveXObject Msxml2 XMLHTTP catch e try return new ActiveXObject Microsoft XMLHTTP catch e return null Ustanovlennya obrobnika podiyi Redaguvati Nastupnim krokom ye stvorennya obrobnika podij i vidkrittya z yednannya Ci vikliki viglyadayut prosto i odnakovo req onreadystatechange processReqChange req open lt GET POST gt lt url gt lt asyncFlag gt Vidkrittya z yednannya i vidpravlennya Redaguvati Pislya viznachennya vsih parametriv zapitu jogo zalishayetsya tilki vidpraviti Robitsya ce funkciyeyu send Yaksho neobhidno peredati na server POST dani yih treba pidstaviti yak parametr dlya ciyeyi funkciyi POST dani povinni buti zgornuti v URL zakodovanij ryadok koduvannya UTF 8 Inshimi slovami cej ryadok matime viglyad yakij mi zvikli bachiti v komandnomu ryadku brauzera pri peredachi danih komandoyu GET Pri vidpravlenni zapitu metodom GET dlya versiyi bez ACTIVEX neobhidno vkazati parametr null v reshti vipadkiv mozhna ne ukazuvati niyakih parametriv ale ne bude pomilkoyu yaksho dlya GET zavzhdi bude vkazanij parametr null req send null Pislya cogo pochinaye pracyuvati zgadanij vishe obrobnik podij Vin faktichno osnovna chastina nashoyi programi U obrobniku zazvichaj vidbuvayetsya perehoplennya vsih mozhlivih kodiv stanu zapitu i viklik vidpovidnih dij a takozh perehoplennya mozhlivih pomilok Vlasne os priklad chastini kodu z cimi dvoma funkciyami var req function loadXMLDoc url req null if window XMLHttpRequest try req new XMLHttpRequest catch e else if window ActiveXObject try req new ActiveXObject Msxml2 XMLHTTP catch e try req new ActiveXObject Microsoft XMLHTTP catch e if req req onreadystatechange processReqChange req open GET url true req send null function processReqChange Tilki v stani complete if req readyState 4 dlya stanu OK if req status 200 Yaksho 200 robimo potribni diyi 404 ne znajdeno else alert Ne vdalos oderzhati dani n req statusText Pidsumkovij kod Redaguvati Otzhe pochatkovij kod JavaScript chastini var req var reqTimeout function loadXMLDoc url req null if window XMLHttpRequest try req new XMLHttpRequest catch e else if window ActiveXObject try req new ActiveXObject Msxml2 XMLHTTP catch e try req new ActiveXObject Microsoft XMLHTTP catch e if req req onreadystatechange processReqChange req open GET url true req send null reqTimeout setTimeout req abort 5000 else alert Brauzer ne pidtrimuye AJAX function processReqChange document form1 state value stat req readyState if req readyState 4 clearTimeout reqTimeout document form1 statusnum value req status document form1 status value req statusText only if OK if req status 200 document form1 response value req responseText else alert Ne vdalosya otrimati dani n req statusText function stat n switch n case 0 return ne inicializovano break case 1 return Zavantazhennya break case 2 return Zavantazheno break case 3 return V procesi break case 4 return Vikonano break default return Nevidomij stan function requestdata params loadXMLDoc examples httpreq php params Teper HTML forma lt form name form1 gt lt table width 100 style font size 100 gt lt tr gt lt td width 30 valign top gt Stan zapitu lt td width 70 gt lt input size 25 disabled type text name state value gt lt tr gt lt td valign top gt Kod stanu lt td gt lt input disabled size 2 type text name statusnum value gt lt input disabled size 19 type text name status value gt lt tr gt lt td valign top gt Dani vid servera lt td gt lt textarea rows 6 name response gt lt textarea gt lt tr gt lt td gt Ryadok GET zapitu lt td gt lt input type text name getparams value gt lt input type button onclick requestdata getparams value value GET gt lt table gt lt form gt I naostanok PHP fajl lt php header Content type text plain charset windows 1251 header Cache Control no store no cache must revalidate header Cache Control post check 0 pre check 0 false header Expires 1 echo Hello world n n if isset a for i 1 i lt 10000 i echo Ce testovij ryadok if i 1000 0 flush if count GET gt 0 echo n n Peredano GET om n print r GET gt Koduvannya RedaguvatiVsi parametri GET POST sho jdut na server okrim vipadku multipart form data koduyutsya po riznomu v riznih brauzerah Zokrema Firefox koristuyetsya standartnim kodom URL Opera vdayetsya do koduvannya v UTF 8 IE7 peredaye kirilicyu ne koduyuchi yak ye Tomu treba buti uvazhnim informaciya pro sposib koduvannya prisutnya v zagolovkah zapitu Napriklad v PHP yih potribno za potrebi perekoduvati funkciyeyu iconv Yedino mozhna buti pevnim sho latinicya ne perekodovuyetsya v bud yakomu vipadku i yaksho ye mozhlivist zalishitisya v ramkah latinici ce pozbavit programista vid dodatkovih klopotiv Vidpovid servera brauzer sprijmaye v tomu koduvanni yake vkazane v zagolovku vidpovidi Content Type Tobto znovu zh taki v PHP shob brauzer sprijnyav vidpovid v Windows 1251 potribno poslati zagolovok tipu header Content Type text plain charset windows 1251 Abo zh ce maye zrobiti server Vidomi problemi RedaguvatiProblema z keshuvannyam v Microsoft Internet Explorer Redaguvati Internet Explorer keshuye GET zapiti Ti avtori yaki neznajomi z keshuvannyam HTTP spodivayutsya sho GET zapiti ne keshuyutsya abo sho kesh mozhe buti obijdenij yak u razi natisnennya knopki onovlennya U deyakih situaciyah uniknennya keshuvannya dijsno ye pomilkoyu Odnim z rishen ye vikoristannya metodu POST yakij nikoli ne keshuyetsya prote vin priznachenij dlya inshih operacij Inshim rishennyam ye vikoristannya metodu zapitu GET sho vklyuchaye unikalnij ryadok zapitu z kozhnim viklikom yak pokazano na prikladi nizhche req open GET xmlprovider php hash Math random abo ustanovki zagolovka Expires na minulu datu u vashomu skripti yakij generuye vmist XML U PHP ce bude tak header Expires Mon 26 Jul 1997 05 00 00 GMT disable IE caching header Last Modified gmdate D d M Y H i s GMT header Cache Control no cache must revalidate header Pragma no cache U servletah Java ce bude tak response setHeader Pragma no cache response setHeader Cache Control no cache no store must revalidate response setDateHeader Expires 0 Inakshe mozhna primusiti ob yekt XMLHttpRequest zavzhdi vityagati novij vmist ne vikoristovuyuchi kesh req open GET xmlprovider php req setRequestHeader If Modified Since Sat 1 Jan 2000 00 00 00 GMT req send null Vazhlivo vidmititi sho vsi ci metodiki povinni vikoristovuvatisya u razi koli keshuvannya zavazhaye V osnovnomu zh krashe otrimati perevagi v shvidkosti pri keshuvanni mozhlivo kombinuyuchi zi specialno vkazanimi datami modifikaciyi abo inshimi dorechnimi zagolovkami na serveri tak shob maksimalno vikoristovuvati keshuvannya bez otrimannya nepravilnih rezultativ Povtorne vikoristannya ob yekta XmlHttpRequest Redaguvati V Internet Explorer yaksho open viklikanij pislya ustanovki onreadystatechange mozhe buti problema z povtornim vikoristannyam cogo XmlHttpRequest Shob vikoristovuvati nanovo XmlHttpRequest spochatku viklikajte metod open a potim priznachajte onreadystatechange Ce potribno tomu sho IE neyavno ochishaye ob yekt XmlHttpRequest v metodi open yaksho jogo stan completed Viklikati abort dlya perenapravlennya zapitu na inshij URL ne potribno navit yaksho potochnij zapit she ne zavershivsya Vitoki pam yati Redaguvati V Internet Explorer ob yekt XmlHttpRequest nalezhit seredovishu DOM COM a Javascript funkciya seredovishu Javascript Viklik req onreadystatechange function neyavnij krugovij zv yazok req posilayetsya na funkciyu cherez onreadystatechange a funkciya cherez oblast vidimosti bachit posilayetsya na req Nemozhlivist viyaviti i obirvati takij zv yazok v bagatoh do IE 6 7 redakcij chervnya 2007 versiyah Internet Explorer privodit do togo sho XmlHttpRequest razom z vidpoviddyu servera funkciya obrobnik i vse zamikannya micno osidayut v pam yati do perezavantazhennya brauzera Shob cogo uniknuti ryad frejmvorkiv YUI dojo vzagali ne stavlyat onreadystatechange a natomist cherez setTimeout pereviryayut jogo readyState kozhni 10 milisekund Ce rozrivaye krugovu zv yazku req lt gt onreadystatechange i vitik pam yati ne zagrozhuye navit v najbilsh glyuchnih brauzerah Obmezhennya bezpeki RedaguvatiKross domennij XMLHttpRequest Redaguvati Dlya obmezhennya XmlHttpRequest vikoristovuyetsya filosofiya Same Origin Policy Pravilo odnogo dzherela Vono duzhe proste kozhen sajt pracyuye v svoyij pisochnici Zapit mozhna robiti tilki na adresi z tim zhe protokolom domenom portom sho i potochna storinka Tobto iz storinki na adresi http site com ne mozhna zrobiti XmlHttpRequest na adresu https web archive org web 20190617134849 http www site com http site com 81 nedostupne posilannya z chervnya 2019 abo https web archive org web 20030621190843 http www othersite com Ce stvoryuye problemu yaksho hochetsya uzyati vmist z inshogo sajtu Yak pravilo v comu vipadku zamist XmlHttpRequest vikoristovuyutsya inshi zasobi napriklad zavantazhennya cherez dinamichno stvoryuvanij teg lt script gt Ale zdebilshogo XmlHttpRequest ye zruchnishim Proksi Redaguvati Najprostishij sposib obijti ce obmezhennya proksuvannya Pripustimo mi hochemo zrobiti zapit z http site com Arhivovano 17 chervnya 2019 u Wayback Machine na https web archive org web 20150508130049 http remote com get html Zamist vkazivki remote com u metodi open tam stavitsya URL vidu http site com proxy remote com get html nedostupne posilannya z chervnya 2019 a server na site com vzhe obroblyaye cej zapit yak treba Yaksho remote com znahoditsya na inshomu serveri to serveru site com dovedetsya proksuvati vidviduvachevi yak zapit tak i vidpovid Pri comu zrozumilo site com ne otrimaye kuki remote com tomu z ciyeyi tochki zoru dlya koristuvacha vse bezpechno Vikoristannya naddomenu Redaguvati Chasto krosbrauzerni zapiti ce sposib obijti obmezhennya v 2 odnochasnih z yednannya do odnogo domenu portu Sposib vikoristovuvati dva riznih servera v spilkuvanni z vidviduvachem Kros domenni zapiti mizh naddomenami https web archive org web 20110102121034 http a site com http b site com nedostupne posilannya z chervnya 2019 na http site com Arhivovano 17 chervnya 2019 u Wayback Machine dopustimi cherez vlastivist document domain yake treba vstanoviti v site com na storinci a site com document domain site com vse teper mozhu robiti XmlHttpRequest na site com req open POST http site com giveme php Bud yaki zapiti dopustimi mizh sajtami sho znahodyatsya v dovirenij trusted zoni Internet Explorer Otzhe vnutrishnij korporativnij portal mozhe buti u vsih v cij zoni i robiti zapiti do bud yakih sajtiv She odin hitrij pidhid nazivayetsya XHRIframeProxy i dozvolyaye robiti XmlHttpRequest do bud yakih domeniv za dopomogoyu hitrogo iframe haka V plaginah Google Chrome Redaguvati Pishuchi addon do brauzera Google Chrome mozhna dozvoliti robiti zapiti na dovilni serveri zapisavshi yihni adresi v manifest json 2 name My extension permissions http www google com Primitki Redaguvati Mozilla namagalasya zberegti maksimalnu sumisnist iz originalom buli vilucheni lishe propriyetarni nazvi Microsoft ta ActiveX Arhivovana kopiya Arhiv originalu za 8 lyutogo 2010 Procitovano 27 lipnya 2010 Div takozh RedaguvatiAJAX DOM XML JSONPosilannya RedaguvatiOb yekt XMLHttpRequest Arhivovano 5 lyutogo 2012 u WebCite robochij naris W3C yavaskript ukr XMLHttpRequest Arhivovano 13 kvitnya 2021 u Wayback Machine pro XMLHttpRequest ukrayinskoyu movoyu Apple Safari 1 2 Arhivovano 12 sichnya 2010 u Wayback Machine Microsoft IXMLHTTPRequest Mozilla XML Extras Arhivovano 30 listopada 2005 u Wayback Machine Mozilla XMLHttpRequest object HowTo Arhivovano 24 lyutogo 2006 u Wayback Machine nbsp Ce nezavershena stattya pro Internet Vi mozhete dopomogti proyektu vipravivshi abo dopisavshi yiyi Otrimano z https uk wikipedia org w index php title XMLHttpRequest amp oldid 35769790