jqXHR - http-status-code-403 (mais la statuscode est 0)
- je obtenir le statuscode 0 ... mais c'est le code 403.
Quelqu'un peut me dire quel est le problème?
JQUERY
var jqxhr = $.ajax({
url: 'http://gdata.youtube.com/feeds/api/users/bernd/favorites?alt=json',
dataType: 'json'
}).success(function(xhr) {
alert(xhr.status);
}).error(function(xhr) {
alert(xhr.status);
return false;
})
DÉMO -> http://jsfiddle.net/QFuBr/
Merci d'avance!
Peter
Maintenant serait un bon moment pour le prix de la prime.
OriginalL'auteur Peter | 2011-04-14
Vous devez vous connecter pour publier un commentaire.
Le serveur donne une erreur 403 pour une navigateur, parce que vous n'avez pas la permission d'accéder à la ressource, en raison du message d'erreur signalé ("les Favoris de l'utilisateur ne sont pas publiques.").
Toutefois, le serveur n'a même pas obtenir la demande dans le jsFiddle exemple.
Vous n'êtes pas autorisé à faire de la croix-navigateur de requêtes AJAX. Ceci est appelé la de même la politique de l'origine. C'est pour des raisons de sécurité, pour empêcher les codeurs de faire des choses désagréables à votre insu. C'est un outil rudimentaire, mais efficace.
Quand vous n'avez même pas aller aussi loin que l'envoi d'une requête au serveur, il n'y a pas de code d'état. Ceci est rapporté par l'objet XMLHTTPRequest (et ses jqXHR wrapper)
0
.Fondamentalement, vous ne pouvez pas faire ce que vous essayez de le faire dans le navigateur.
Si vous avez besoin du navigateur pour accéder à des données de cette manière asynchrone, vous devez écrire un wrapper sur votre serveur afin d'extraire les informations à partir du serveur distant et de le nourrir pour le navigateur. Il y a une solution (on appelle JSONP – JSON avec un Rembourrage)
mais je ne crois pas que YouTube prend en charge.Edit: Par gradbot réponse, il est possible de faire un JSONP demande de modification de votre code pour définir
dataType
àjsonp
.Toutefois, vous ne pourrez utiliser
xhr.status
. C'est parce que JSONP ne pas utiliser l'objet XHR, donc il n'y a pas de statut disponible pour vérifier.Voici un exemple de travail à l'aide de l'alimentation gradbot suggéré. À noter que le résultat de l'objet est passé au gestionnaire, plutôt que de la jqXHR objet.
CORS (Cross Origin Resource sharing) est maintenant une option soutenue par la plupart des navigateurs les plus récents pour permettre à la croix-domaine de requêtes AJAX. Voir en.wikipedia.org/wiki/Cross-Origin_Resource_Sharing et developer.mozilla.org/en-US/docs/HTTP_access_control et caniuse.com/#search=cors
OriginalL'auteur lonesomeday
Vous devez définir
dataType: "jsonp"
et vous avez besoin d'être connecté en tant qu'utilisateur, vous êtes à essayer d'obtenir des favoris. Dans ce cas, je utiliser mon propre nom d'utilisateur grabot et l'alerte revient à succès.Si vous n'avez pas un cookie valide pour le compte de votre tentative d'accéder à l'api appel renvoie un
403
avec le contenu"Favorites of requested user are not public."
youtube ne prend en effet en charge.
Vous pouvez montrer comment, ensuite, parce que le changement que vous suggèrent ne pas faire les choses au mieux.
Mis à jour mon post. L'original de la requête posté requiert une authentification. Si vous passé dans un navigateur, vous verrez le message d'erreur. Cette api est publique
http://gdata.youtube.com/feeds/api/users/bernd?alt=json
OriginalL'auteur gradbot
La 403 est parce que vous devez fournir des informations d'identification pour l'utilisateur dont les vidéos sont en cours d'accès. En supposant informations d'identification correctes sont fournis, la demande est toujours d'échouer à cause de la croix-restrictions de domaine.
Dans la plupart des cas, le code d'état
0
implique que la demande n'a pas pu être envoyé au serveur. Voici ce que la console Chromée dans les journaux pour votre violon exemple.Youtube, en fait, toutes les Données de Google API soutien JSONP mais pour l'utiliser, vous devrez passer un
alt
paramètre avec la valeurjson-in-script
et spécifier ledataType
commejsonp
. jQuery fournira le paramètre de rappel pour vous. Basé sur des tests empiriques, il semble que Youtube ne se soucient pas de laalt
paramètre être spécifiquementjson-in-script
. Aussi longtemps qu'uncallback
paramètre est spécifié, lealt
paramètre peut prendre la valeurjson
.http://gdata.youtube.com/feeds/api/users/gradbot/favorites?alt=json
http://gdata.youtube.com/feeds/api/users/gradbot/favorites?alt=json&callback=foo
Voici un exemple de travail pour un accessible au public d'alimentation.
OriginalL'auteur Anurag
Vous ne pouvez pas faire des requêtes inter-domaine(GET ou POST) en raison de restrictions de sécurité dans la plupart des navigateurs modernes.
Si vous souhaitez récupérer des données à partir d'un autre domaine d'envisager l'utilisation d'un proxy inverse de ce que vous installez sur votre serveur et d'envoyer toutes les demandes de grâce. Pour le navigateur, il sera toujours ressembler à des données à partir d'un même domaine.
L'un des plus populaires est mod_reverse dans Apache, mais il existe d'autres alternatives en fonction de votre environnement de serveur est.
Une autre alternative est d'utilisateur JSONP si l'API Google le prend en charge.
OriginalL'auteur igorti