2011-02-07 4 views
2

J'essaye de faire une requête ajax à vimeo pour obtenir les données d'une vidéo vimeo nécessaire pour notre application web.

var vimeoDataUrl = "http://vimeo.com/api/oembed.json?url=http://vimeo.com/" + vimeoId; //+ "&callback=?"; 
console.log(vimeoDataUrl); //http://vimeo.com/api/oembed.json?url=http://vimeo.com/16630327 

$.getJSON(vimeoDataUrl, function (json, textStatus) { 
    if (json != null) { 
     var title = json.title; 
     var videoWidth = json.width; 
     var videoHeight = json.height; 
     if (title != null && videoWidth != null && videoHeight != null) { 

      var vimeoImageUrl = json.thumbnail_url; 
      $('#largeImageUrl').val(vimeoImageUrl); 
      $('#videoName').val(title); 
      $('#videoWidth').val(videoWidth); 
      $('#videoHeight').val(videoHeight); 
      hasValidVideoUrl = true; 
     } 
    } 
    else 
    { 
     //an message is shown 
    } 
    $('#videoName, #placeVideo').removeAttr('disabled'); 
    $('img#loading').remove(); 
}); 

Quand je rentre dans la vimeoDataUrl dans un navigateur comme Internet Explorer, je reçois le résultat JSON comme prévu, mais dès que je suis à la recherche à la demande de Firebug je reçois une réponse vide avec 200 -statut. Quelqu'un peut-il m'aider ici? Est-ce que le problème est situé à Vimeo ou est-ce que je fais quelque chose de mal?

Répondre

4

Vous ne pouvez pas effectuer de requête JSON vers différents domaines (JS docs et wikipedia).
Vous devez utiliser jsonp

Si vous Décommentez la dernière partie de votre URL, le &callback=? cela fonctionne très bien .. parce que jquery utilisera jsonp si elle trouve dans l'URL.

donc utiliser

var vimeoDataUrl = "http://vimeo.com/api/oembed.json?url=http://vimeo.com/" + vimeoId + "&callback=?"; 

de la getJsondocs

JSONP

Si l'URL comprend la chaîne "callback =?" (ou similaire, comme défini par l'API côté serveur), la demande est traitée comme JSONP à la place. Voir la discussion du type de données jsonp dans $ .ajax() pour plus de détails.

Notes complémentaires:

  • En raison des restrictions de sécurité du navigateur, la plupart des demandes "Ajax" sont soumis à la même politique d'origine; la demande ne parvient pas à récupérer les données d'un autre domaine, sous-domaine ou protocole.
  • Les requêtes de script et JSONP ne sont pas soumises aux mêmes restrictions de politique d'origine .

Démo àhttp://www.jsfiddle.net/gaby/gQaXD/

+0

Merci pour la bonne réponse. Va enquêter plus loin demain et vous le faire savoir! – Rob

+0

A également dû modifier mon ajaxSetup un peu. Nous y avons apporté des modifications lors de la mise à niveau vers jQuery 1.5. La réinitialisation de jsonpcallback et l'ajout du paramètre ont résolu le problème. – Rob

+0

@Rob, bon d'entendre tout va bien .. –