Fonctions de rappel de JavaScript et Google Feed API

J'essaie d'implémenter quelques flux dans mon site à l'aide d'une fonction de partage de div. Auparavant, j'avais des blocs de code JavaScript identiques dans ma page (un pour chaque flux), mais dans l'intérêt d'être un codeur bon (ou meilleur), j'ai décidé de coller le code répétitif dans un fichier de script externe et de l'exécuter avec des paramètres variables au lieu.

Malheureusement, les flux refusent de charger avec ma nouvelle mise en œuvre, et je ne me souviens pas des idées. J'ai structuré ma fonction de rappel en fonction des suggestions intéressantes de l'utilisateur ndp dans la question 9662168 .

Donc, j'ai deux fonctions dans mon fichier de script externe (rédaction de code mineur pour simplifier):

function populateRSSFeed(divID) { var targetDiv = document.getElementById(divID); return function callback(result) { if (!result.error) { var container = document.getElementById(targetDiv); var list = document.createElement('ul'); <snip: div-population code here> container.appendChild(list); } else alert('Error fetching feeds!'); } } function initializeRSSFeed(callback, targetFeed) { google.load('feeds','1'); var feed = new google.feeds.Feed(targetFeed); var numEntries = 3; feed.setNumEntries(numEntries); feed.load(callback); } 

Ces fonctions sont appelées comme suit dans mon HTML:

 <script> var callback = populateRSSFeed('feed-list-wrapper-1'); initializeRSSFeed(callback, 'http://rss.cnn.com/rss/cnn_topstories.rss'); </script> 

Le message d'erreur que je reçois me fait penser que quelque chose ne va pas au stade de l'alimentation, mais je ne peux pas déterminer la cause.

 Uncaught TypeError: Cannot read property 'Feed' of undefined 

Qu'en pensez-vous?

Il semble que vous n'utilisez pas setOnLoadCallback pour attendre que les scripts Google setOnLoadCallback chargés. Cela expliquerait pourquoi google.feeds est indéfini (résultant directement de l'erreur que vous voyez).

Essayez d'utiliser ce script à la place (je viens de suivre l'exemple «Bonjour Monde» dans le Guide des développeurs ).

 google.load('feeds','1'); function onGoogleReady() { var callback = populateRSSFeed('feed-list-wrapper-1'); initializeRSSFeed(callback, 'http://rss.cnn.com/rss/cnn_topstories.rss'); } google.setOnLoadCallback(onGoogleReady);