Snabbtips Cross Domain AJAX-förfrågan med YQL och jQuery

Av säkerhetsskäl kan vi inte göra AJAX-förfrågningar på flera domäner med jQuery. Till exempel kan jag inte ringa metoden load () och skickas i "cnn.com". Som vi skulle ladda i skript och sådant, liksom vårt önskade innehåll, skulle detta innebära en betydande säkerhetsrisk. Ändå kan det finnas tillfällen då det här är specifikt vad du behöver. Tack vare YQL kan vi lätt tillåta denna funktion!


Prenumerera på vår YouTube-sida för att titta på alla videohandledning!

Manuset

 // Accepterar en url och en återuppringningsfunktion att köra. funktionsförfråganCrossDomain (site, callback) // Om ingen webbadress skickades, avsluta. om (! site) alert ('Ingen webbplats skickades.'); returnera false;  // Ta den medföljande webbadressen och lägg till den i en YQL-fråga. Se till att du kodar det! var yql = 'http://query.yahooapis.com/v1/public/yql?q=' + encodeURIComponent ('välj * från html där url = "' + site + '") +' & format = xml & callback = cbFunc '; // Be om den YSQL-strängen och kör en återuppringningsfunktion. // Passa en definierad funktion för att förhindra cache-busting. $ .getJSON (yql, cbFunc); funktion cbFunc (data) // Om vi ​​har något att arbeta med ... om (data.results [0]) // Ta bort alla skript taggar av säkerhetsskäl. // VAR VÄLDIGT FÖRSIKTIG. Detta hjälper, men vi borde göra mer. data = data.results [0] .replace (/] *> [\ S \ S] *?<\/script>/ g, "); // Om användaren skickade en återuppringning, och den // är en funktion, ringa den och skicka genom datavärdet. om (typ av återuppringning === 'funktion') callback (data);  // Annars, kanske vi begärde en webbplats som inte existerar, och inget återvände. Annars slänger nytt fel ("Inget returneras från getJSON.");

Ring funktionen

 requestCrossDomain ('http://www.cnn.com', funktion (resultat) $ ('# container'). html (resultat););

Stripping Out Script Tags

Jag var tvungen att fortgå ganska snabbt i videon, så kanske det vanliga uttrycket som stryker ut , eller . Av denna anledning lägger vi till en teckenklass ([^>] *), vilket betyder "Hitta noll eller mer av allt som inte är en slutkonsol. Det här tar hand om attribut och värden.

 [\ S \ S] *?

Därefter vill vi ta bort all kod, liksom eventuella avstånd. \ s refererar till ett mellanslag. \ S hänvisar till allt som inte är ett utrymme. Än en gång lägger vi till en * efter karaktärklassen för att ange att vi vill ha noll eller fler förekomster.

 <\/script>

Slutligen hitta de avslutande skriptetiketterna.


Vidare läsning

  • Ett API för webben: Learning YQL

Detta är endast meningen att ge en glimt av hur vi kan uppnå denna funktionalitet. Bara så mycket kan täckas i en fem minuters video. Gärna diskutera i kommentarerna, och du uppmanas alltid att gaffla källkoden för att förbättra den!