AIR innehåller ett XMLHttpRequest-objekt (XHR) som program kan använda för att begära data. I följande exempel visas en enkel databegäran:
xmlhttp = new XMLHttpRequest();
xmlhttp.open("GET", "http:/www.example.com/file.data", true);
xmlhttp.onreadystatechange = function() {
if (xmlhttp.readyState == 4) {
//do something with data...
}
}
xmlhttp.send(null);
I motsats till en webbläsare tillåter AIR att innehåll som körs i sandlådan application begär data från valfri domän. Resultatet från en XHR som innehåller en JSON-sträng kan utvärderas till dataobjekt, såvida inte resultatet också innehåller körbar kod. Om det finns körbara programsatser i XHR-resultatet returneras ett fel och utvärderingsförsöket misslyckas.
Kodinjektioner från fjärrkällor förhindras genom att synkrona XHR:er returnerar ett tomt resultat om de görs innan en sida har laddats färdigt. Asynkrona XHR:er returneras alltid efter att sidan har laddats.
AIR blockerar som standard korsdomäns-XMLHttpRequests i andra sandlådor än application. Ett överordnat fönster i sandlådan application kan välja att tillåta korsdomänsförfrågningar i en underordnad bildruta som rymmer innehåll i en annan sandlåda än application genom att ställa in
allowCrossDomainXHR
, ett attribut som tillförs av AIR, på
true
i det innehållande bildrute- eller iframe-elementet:
<iframe id="mashup"
src="http://www.example.com/map.html"
allowCrossDomainXHR="true"
</iframe>
Obs!
När det passar kan AIR-klassen URLStream också användas för att hämta data.
Om du skickar en XMLHttpRequest till en fjärrserver från en bildruta eller iframe som rymmer programinnehåll som har mappats till en fjärrsandlåda, ska du se till att mappnings-URL:en inte maskar serveradressen som används i XHR. Ta en titt på följande iframe-definition, som mappar programinnehåll till en fjärrsandlåda för domänen example.com:
<iframe id="mashup"
src="http://www.example.com/map.html"
documentRoot="app:/sandbox/"
sandboxRoot="http://www.example.com/"
allowCrossDomainXHR="true"
</iframe>
Eftersom attributet
sandboxRoot
mappar om rot-URL:en för adressen www.example.com, läses alla förfrågningar in från programkatalogen och inte från fjärrservern. Förfrågningar mappas om oavsett om de härleds från sidnavigering eller från en XMLHttpRequest.
Om du vill undvika att blockera dataförfrågningar till fjärrservern av misstag, ska du mappa
sandboxRoot
till en underkatalog hos fjärr-URL:en i stället för roten. Katalogen behöver inte finnas. Om du till exempel vill tillåta att förfrågningar till www.example.com läses in från fjärrservern i stället för programkatalogen, ändrar du föregående iframe till följande:
<iframe id="mashup"
src="http://www.example.com/map.html"
documentRoot="app:/sandbox/"
sandboxRoot="http://www.example.com/air/"
allowCrossDomainXHR="true"
</iframe>
I det här fallet läses bara innehåll i underkatalogen
air
in lokalt.
Mer information om mappning av sandlådor finns i
Bildrute- och iframe-element i HTML
och
HTML-säkerhet i Adobe AIR
.