Sfat rapid solicitarea AJAX cu domenii cross-domain cu YQL și jQuery

Din motive de securitate, nu putem face cereri AJAX pe mai multe domenii cu jQuery. De exemplu, nu pot apela metoda load () și treci în 'cnn.com'. Așa cum am fi încărcat în script-uri și așa, precum și conținutul dorit, acest lucru ar prezenta un risc semnificativ de securitate. Cu toate acestea, pot exista momente când acest lucru este exact ceea ce aveți nevoie. Datorită YQL, putem permite această funcționalitate destul de ușor!


Abonați-vă la pagina noastră YouTube pentru a viziona toate tutorialele video!

Scriptul

 // Acceptă o funcție de url și o funcție de apel invers. funcția requestCrossDomain (site, callback) // Dacă nu a fost transmisă nicio adresă URL, ieșiți. dacă (! site) alert ("Nu a fost trecut site-ul."); return false;  // Luați urlul furnizat și adăugați-l la o interogare YQL. Asigurați-vă că ați codificat-o! var yql = 'http://query.yahooapis.com/v1/public/yql?q=' + encodeURIComponent ('selectează * din html unde url = "' + site + '") +' & format = xml & callback = cbFunc „; // Solicitați șirul YSQL și executați o funcție de apel invers. // Treceți o funcție definită pentru a preveni bustul în cache. $ .getJSON (yql, cbFunc); funcția cbFunc (date) // Dacă avem ceva de lucru cu ... dacă (data.results [0]) // Eliminați toate etichetele de script, din motive de securitate. // FII FOARTE ATENT. Acest lucru ajută, dar ar trebui să facem mai mult. date = date.results [0] .replace (/] *> [\ S \ S] *?<\/script>/ gi, "); // Dacă utilizatorul a dat un apel invers, și // este o funcție, sunați-l și trimiteți datele prin varianta if (typeof callback === 'function') callback (data);  // Else, Poate că am solicitat un site care nu există și nimic nu a revenit. Altfel aruncă o nouă eroare ("Nimic nu a revenit de la getJSON");

Apelați funcția

 requestCrossDomain ('http://www.cnn.com', funcție (rezultate) $ ('container'). html (results););

Eliminarea etichetelor scripturilor

A trebuit să progresez destul de repede în film, deci poate că expresia regulată care scapă , sau . Din acest motiv, adaugam o clasa de caractere ([^>] *), ceea ce inseamna "Gaseste zero sau mai mult din nimic care NU este un grup de inchidere.Acesta va avea grija de atribute si valori.

 [\ S \ S] *?

Apoi, vrem să eliminăm tot codul, precum și orice spațiere. \ s se referă la un spațiu. \ S se referă la orice nu este un spațiu. Încă o dată, adăugăm a * după clasa de caractere pentru a desemna că dorim zero sau mai multe apariții.

 <\/script>

În sfârșit, găsiți etichetele de script de închidere.


Citirea în continuare

  • Un API pentru Web: Învățarea YQL

Aceasta este menită doar să ofere o privire asupra modului în care putem obține această funcție. Doar atât de mult pot fi acoperite într-un videoclip de cinci minute. Simțiți-vă liber să discutați în comentarii și sunteți întotdeauna încurajați să vă sugerați codul sursă pentru a vă îmbunătăți!

Cod