2010-11-17 16 views
2

J'essaie d'utiliser l'API Musicbrainz via javascript. J'ai trouvé que nous pouvons maintenant effectuer facilement des crossmain avec YQL.Demande crossdomain avec YQL

Et je l'ai fait un fichier jsFiddle qui le fait: http://jsfiddle.net/HBCDF/1/

Le problème que j'ai avec cet extrait est qu'il ne fonctionne pas lorsque la réponse http est XML. Est-ce que quelqu'un a une idée de comment je pourrais changer l'extrait et être en mesure d'obtenir le résultat XML?

Greg

Répondre

2

demandes croisées de domaine doivent être effectués à l'aide jsonp que les demandes normales ajax ne supporte pas les appels inter-domaines. La différence est que jsonp ne fait pas un véritable XmlHttpRequest c'est plutôt d'ajouter ceci à votre page:

<script type="text/javascript" src="TheCrossDomainUrl"></script> 

Si vous essayez de tirer XML vers le bas de cette façon, il échouera car il est pas javascript valide. Je crois qu'il y a quelques manières de tirer vers le bas le XML sans faire un XmlHttpRequest (voir: http://ajaxian.com/archives/xml-messages-with-cross-domain-json). Une autre option consisterait à ajouter une page côté serveur qui héberge la requête pour vous. Votre page courante ferait un XmlHttpRequest normal à une autre page dans votre même domaine, cette page ferait l'appel à Musicbrainz, Musicbrainz répond à votre page de côté de serveur qui répond au manuscrit de côté de client.

+0

Je sais que c'est vieux et la réponse a été acceptée, mais quelqu'un d'autre pourrait venir à travers cela. Et bien, alors que la réponse est correcte en termes de requêtes x-domain et ajax, vous pouvez toujours utiliser YQL pour récupérer XML. La requête YQL dans ce cas montre "select * from html where ..." mais vous obtenez du XML ... Il n'y a pas d'élément HTML. Changez-le pour "sélectionner * de xml où ..." et vous êtes en or. Rappelez-vous que la réponse XML est un élément XML à la racine. – Daved

0

Ajouter au format = json à l'url YQL

var yql = 'http://query.yahooapis.com/v1/public/yql?q=' + encodeURIComponent('select * from html where url="' + site + '"') + '&format=json&callback=?'; 

Et utiliser le if (data.query.results != null) chèque

http://jsfiddle.net/HBCDF/3/