Prise en JSONP via jQuery
Mise à JOUR 1:
C'est ce que j'obtiens dans le navigateur si j'type
http://www.remote_host.com/feed.php?callback=jsonpCallBack
{
"rss": {
"channels": [
{
"title": "title goes here",
"link": "http://www.remote_server.com/feed.php",
"description": "description goes here",
"items": [
{
"title": "item title goes here",
"link": "item link goes here",
"pubDate": "item date goes here",
"description": "item description goes here"
},
{
"title": "item title goes here",
"link": "item link goes here",
"pubDate": "item date goes here",
"description": "item description goes here"
},
{
"title": "item title goes here",
"link": "item link goes here",
"pubDate": "item date goes here",
"description": "item description goes here"
}
]
}
]
}
}
Donc ce n'est pas jsonp?
QUESTION D'ORIGINE:
J'ai le script suivant lorsque j'essaie d'obtenir des données json à partir d'un hôte distant:
$(document).ready(function() {
get_json_feed();
function get_json_feed() {
$.ajax({
url: 'http://www.remote_host.com/feed.php?type=json',
type: 'GET',
dataType: 'jsonp',
error: function(xhr, status, error) {
alert("error");
},
success: function(json) {
alert("success");
}
});
}
});
Mais pour une raison que j'obtiens une erreur et d'avertissement:
Avertissement: des Ressources interprété comme
Script mais transféré, avec le type MIME
texte/html.Erreur: Uncaught SyntaxError:
Jeton inattendu :
Ce que je fais mal?
- u ne essayer de changer le type??
- de quel type? J'ai 2 types de client type et le type de données, et j'ai un type à serverside.
- Cela sonne comme le serveur ne renvoie pas JSONP. Vous devriez essayer (un)
feed.php?type=jsonp
et (b) si le serveur prend en charge JSONP, normalement il accepte un paramètre avec lequel vous spécifiez le nom de rappel, quelque chose comme:feed.php?type=jsonp&callback=?
. Vous devez lire la documentation du service que vous utilisez. - écrire
jsonp: 'callback', jsonpCallback: 'jsonpCallback',
à ur, en option - Oh merci, j'ai oublié à ce sujet... reste à préciser si le nom est différent...
- Kling, comment puis-je vérifier si ce que vous dites la raison, j'obtiens l'erreur? Je suis en train de créer le service moi-même. Le serveur distant m'appartient.
- J'ai juste essayé, et j'ai l'impression d'avoir les mêmes erreurs.
- Essayer quelques combinaisons de paramètres dans le navigateur et/ou de lire la documentation. E. g. si vous tapez
http://www.remote_host.com/feed.php?type=json
dans la barre d'adresse et la réponse ne ressemble pas àfuncName({...})
mais comme{...}
, puis vous obtenez JSON et non JSONP. - Si le serveur appartient à vous, vous aussi, vous devez le configurer pour revenir JSONP.
- Kling, je pensais que j'avais. Quand j'ai taper manuellement l'url pour le serveur, je rentre les données json à l'écran.
- JSON n'est pas JSONP. Lisez à propos de JSONP: en.wikipedia.org/wiki/JSONP et de voir @Pointu de la réponse.
- Consultez la mise à jour 1 pour confirmer.
- Non, ce n'est pas JSONP, c'est juste JSON. Encore une fois, lisez le lien Wikipédia et voir @Pointu de la réponse. Dans ce cas , la réponse devrait ressembler à
jsonpCallBack({...})
, où{...}
est le JSON que vous avez posté ci-dessus. - Merci. Fera et sera de retour dans quelques instants.
Vous devez vous connecter pour publier un commentaire.
Le JSONP "protocole" s'appuie sur le site de répondre à votre demande avec un JavaScript énoncé de la forme,
Le nom de la fonction est fournie comme argument à partir de votre code, avec l'idée étant que le script de réponse, une fois consommée, et interprété par le navigateur, se traduit par un appel à cette fonction avec un analysée blob de JSON — qui est-à-dire, un objet JavaScript. La bibliothèque jQuery va faire de la tenue de livres de travail pour vous, à la limite même de la création à l'échelle mondiale dont l'étendue est fonction de l'appel (qui sera le code qui appelle la fonction de rappel vous offre le "succès" de l'argumentation).
Ainsi, vous devez vérifier que la réponse réelle à partir de ce serveur ressemble. Il me semble que si il peut ne pas être un serveur prêt à répondre de cette façon. Vous pourrait devez vous assurer que il y a un paramètre supplémentaire sur votre URL de la forme "callback=?".
<script>
tag. Lorsque le script est récupéré (l'appel de la fonction autour de cette JSON), l'appel de fonction aura lieu.Je ne sais pas exactement quelle est l'erreur que l'on a, mais il ya quelques conseils utiles pour l'utilisation
jsonp
icierror
: Ce gestionnaire n'est pas appelé pour le cross-domaine de script et JSONP demandes.écrire
jsonp: 'callback', jsonpCallback: 'jsonpCallback'
en ajax paramètres.Réglage
jsonp
pour rappel, puis la configurationjsonpCallback
à jsonpCallback fait la querystring ressembler à ceci:http://domain.com/jsonp-demo.php?callback=jsonpCallback&nom=watever
Charge dans un JSON bloc à l'aide d'JSONP. Va ajouter un supplément de
?callback=?
à la fin de votre URL pour spécifier la fonction de rappel.Votre script devrait ressembler à ceci:
Exemple ici
Ressemble serveur renvoie faux-tête Content-type.
header("content-type: text/javascript");
, de sorte que l'avertissement a maintenant disparu.