2009-07-17 6 views
1

Il est simple:

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http:// 
www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"> 
<html xmlns="http://www.w3.org/1999/xhtml" > 
<head> 
<title></title> 

<script src="jquery.js" type="text/javascript"></script> 

<script type="text/javascript"> 
$(document).ready(function() { 
     $.get("http://twitter.com/statuses/user_timeline/19092829.rss"); 
    }); 
</script> 
</head> 
<body> 

</body> 
</html> 

Dans IE et Opera cela fonctionne parfaitement, mais dans FF 3.5, Chrome et Safari je reçois 400 Bad Request. En regardant la requête en utilisant Fiddler2 et FireBug, quelque chose remplace GET avec OPTIONS. Mais dans IE et Opera, il apparaît toujours comme GET. Je ne comprends pas?

EDIT: Je me sens comme un idiot de ne même pas penser à des politiques XSS. Merci les gars.

+0

Je pense que la demande OPTIONS est probablement liée au projet de W3C de partage des ressources inter-origine (http://www.w3.org/TR/access- contrôle/). Jonathan a raison de dire que le problème sous-jacent est la sécurité inter-domaines. –

Répondre

5

Vous ne pouvez pas $ .get() d'un domaine différent. Les problèmes de sécurité.

Vous pouvez cependant passer par un script proxy sur votre serveur. Vous pouvez utiliser PHP ou C# (.NET) pour obtenir les données pour vous et les renvoyer à votre script jQuery.

+0

pourquoi Opera & IE le laisse-t-il passer? –

+0

Plus d'informations disponibles dans les notes de http://docs.jquery.com/Ajax/jQuery.ajax#options – Sampson

+0

@Mike_G Pour Opera et IE, vous avez peut-être abaissé leur niveau de sécurité. Vérifiez ma réponse pour la solution jQuery spécifique à Twitter. –

2

Votre script a rencontré une erreur d'autorisation refusée.

Les navigateurs disposent d'une fonction de sécurité qui définit les URL que vous pouvez appeler. L'appel d'une URL provenant d'un domaine différent n'est généralement pas autorisé, car cela ouvrira des accès aux attaques cross site scripting. JQuery a une solution appelée JSONP, mais cela dépend de l'autre partie fournissant l'implémentation JSONP.

Pour Twitter, j'ai personnellement utilisé ceci:

$.getJSON('http://twitter.com/statuses/user_timeline/[username].json?count=10&callback=?', function(data) { }); 
Questions connexes