Cross domain AJAX
söndag, maj 18th, 2008I fredags öppnades mina ögon en aning när jag förstod att de javascript som man inkluderar faktiskt kan köra kod från det anropande scriptet. Det konstiga är egentligen att jag inte förstått det tidigare eftersom jag skrivit en diger mängd javascript som inkluderar andra javascript. Nåväl det som är coolt och lite nytt för mig är att man på detta sätt kan “plantera” callback funktioner och i dessa callback funktioner passar det ju utmärkt om man för in JSON data som är evaluerad och klar att användas på klienten.
Exempel:
mydomain1.com/client.html:
<script src=”http://mydomain2.com/client.js”></script>
mydomain2.com/client.js:
function myCallback(data)
{
var theDate = data.date;
//handle theDate…
}
var req = ‘http://mydomain2.com/server.js’;
document.write(”<scr”+”ipt></scr”+”ipt>”);
mydomain2.com/server.js:
myCallback({”date”:new Date()});
Självklart ska server.js vara en server-side komponent.
Det som är helt suveränt är att man kan sluta krångla med iframes och document.domain odyl och bara skriva fina webbtjänster a’la REST som sprutar ur sig JSON. Nu återstår egentligen en enda sak för mig och det är att kunna göra exakt ovanstående men synkront. Denna metod är ju asynkron då browsern kommer ladda tredjepartsscriptet efter att detta script är färdigevaluerat. Om nån vet hur man gör synkrona requests cross-domain så får man gärna kommentera här
Exempel på hur man gör inom en domän: Synchronous javascript
Uppdatering: Läste igenom hur man kan göra samma sak med XhrIframeProxy, vilket är ett ramverk som DOJO bjuder på. Lärde mig också att servern måste sätta content-type till text/javascript för att det anropande scriptet ska autoevaluera det.


