Av sikkerhetsmessige grunner kan vi ikke gjøre AJAX-forespørsler på tvers av domene med jQuery. For eksempel kan jeg ikke ringe metoden load (), og passere i 'cnn.com'. Som vi ville laste inn i skript og slikt, så vel som vårt ønskede innhold, ville dette gi en betydelig sikkerhetsrisiko. Likevel kan det være tider når dette er spesifikt det du trenger. Takket være YQL kan vi lett tillate denne funksjonaliteten!
// Godtar en url og en tilbakeringingsfunksjon for å kjøre. funksjonsforespørselCrossDomain (nettsted, tilbakeringing) // Hvis ingen URL ble passert, avslutte. hvis (! site) alert ('Ingen side ble passert.'); returner falsk; // Ta med den angitte nettadressen, og legg den til i en YQL-spørring. Pass på at du koder det! var yql = 'http://query.yahooapis.com/v1/public/yql?q=' + encodeURIComponent ('velg * fra html hvor url = "' + site + '") +' & format = xml & callback = cbFunc '; // Be om den YSQL-strengen, og kjør en tilbakeringingsfunksjon. // Pass en definert funksjon for å forhindre cache-busting. $ .getJSON (yql, cbFunc); funksjon cbFunc (data) // Hvis vi har noe å jobbe med ... hvis (data.results [0]) // Strip ut alle skriptkoder av sikkerhetshensyn. // VÆR VELDIG FORSIKTIG. Dette hjelper, men vi bør gjøre mer. data = data.results [0] .replace (/ , eller . Av denne grunn legger vi til en karakterklasse ([^>] *), som betyr "Finn null eller mer av noe som IKKE er en avslutningsbrakett. Dette vil ta vare på attributter og verdier.[\ S \ S] *?Deretter ønsker vi å fjerne all kode, samt mellomrom. \ s refererer til et mellomrom. \ S refererer til noe som ikke er et mellomrom. Igjen legger vi til en * etter karakterklassen til å utpeke at vi ønsker null eller flere forekomster.
<\/script>Til slutt finner du de avsluttende skriptetikettene.
Videre lesning
Dette er bare ment å gi et glimt av hvordan vi kan oppnå denne funksjonaliteten. Bare så mye kan dekkes i en fem minutters video. Du er velkommen til å diskutere i kommentarene, og du er alltid oppfordret til å gaffel kildekoden for å forbedre den!