Sveicināti,
Turpinot iesākto tēmu par Microsoft IE 8 jaunumiem no programmētāja stata punkta. Šoreiz, par iespēju veikt asinhronos vaicājumus uz citu domēnu no JavaScript. Līdz nesenam laikam, modernajos pārlūkos pastāvēja ierobežojums, veidot vaicājumus tikai sava domēna ietvaros. Drīzumā šis ierobežojums tiks likvidēts. Bet par visu pēc kārtas.
IE 8 pārlūkā no JavaScript ir pieejams jauns objekts XDomainRequest. Objekts nodrošina šo te komunikāciju starp domēniem. Apskatīsim, kā tas darbojās uz piemēra
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
<title></title>
<script type="text/javascript">
function getData() {
var xdr = new XDomainRequest();
xdr.open("get", "http://www.getdate.com/getdate.aspx");
xdr.onload = function() {
document.getElementById('content').innerHTML =
toStaticHTML(xdr.responseText);
}
xdr.send();
}
</script>
</head>
<body>
<button onclick="getData();">
Get date</button>
<div id="content"></div>
</body>
</html>
Uzrakstīju nelieku HTML kodu, pēc noklusējuma uz ekrāna parādās poga ar tekstu “Get date”. Nospiežot pogu, tiek izsaukta metode “getData”. Tie izveidots objekts XDomainRequest. Ar “open” metodes palīdzību, tiek izveidots savienojums ar citu domēna serveri. Parakstāmies uz notikumu “onload”, saņemtās atbildes saturu ievietojam elementā DIV ar nosaukumu “content”. Šinī vietā jāpiemin jauna IE 8 metode “toStaticHTML”, ar tās palīdzību kods tiek pasargāts no iespējamās JavaScript injekcijas(Injection). Vienkārši sakot, no satura tiek izmesti visi skripti un skriptu izsaukumi. Manu kodu noslēdz metodes “send” izsaukums. Tātad pieprasījums ir nosūtīts. No klienta puses tas arī vienkāršā gadījumā arī viss.
Servera pusē, servera atbildei ir jāpievieno iesākums (Header) (Response.AddHeader("Access-Control-Allow-Origin", "*"). Tādā veidā tiek pateikt, ka tiek atbalstīts starp domēnu izsaukums. Zvaigznītes vietā var norādīt arī konkrētu domēnu.
Pielikumā pievienoju Visual Studio projektu, lai to notestētu uz sava datora.
P.S. Pirms palaist piemēru modificējies Windows host failu, lai domēns www.getdate.com tiktu piesaistīts localhost.
Cerams noderēs!
Posted
Apr 08 2009, 06:17 PM
by
andrejs.mamontovs