Die undefined is waarschijnlijk het resultaat van de functie getYoutubeInfo omdat er geen return in staat.quote:Op maandag 18 augustus 2014 04:37 schreef d4v1d het volgende:
Ik heb het volgende:
[ code verwijderd ]
Dit lijkt redelijk te werken. de console.log geeft hetgene wat ik verwacht.
Maar zodra ik de functie aanroep krijg ik een undifined te zien
Ennnn in de developer console van Chrome zie ik eerst de undefined en dan zie ik pas XHR finished loading: GET bla bla bla. Alsof die eerst de undefined stuurt en dan pas de json api aanroept.
Waar komt die undefined vandaan en waarom werkt mijn return niet maar console.log wel?
De code waarmee ik hem aanroep:quote:Op maandag 18 augustus 2014 07:21 schreef Aether het volgende:
[..]
Die undefined is waarschijnlijk het resultaat van de functie getYoutubeInfo omdat er geen return in staat.
Hoe roep je die functie aan, want de aanroeper kan nu niet het promiseobject gebruiken.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 | function buildList() { var tempElm; $.each(videoList, function(i, id) { tempElm = null; tempElm = $(".videoList .videoItem.hidden").clone().removeClass("hidden"); console.log(getYoutubeInfo(id)); tempElm.find("h4.vid-title").text(getYoutubeInfo(id).title); tempElm.find("span.vid-uploader").text(getYoutubeInfo(id).uploader); tempElm.find("p.vid-id").text("video id: " + id); tempElm.appendTo("ul.videoList"); }); }; |
De functie getYoutubeInfo zal niet direct de gegevens van Youtube terugkrijgen dus die zijn niet direct te gebruiken in buildList. Je kunt het Promise-object als functiewaarde teruggeven zodat het doorvoeren pas plaatsvindt wanneer de gegevens beschikbaar zijn.quote:Op maandag 18 augustus 2014 14:36 schreef d4v1d het volgende:
[..]
De code waarmee ik hem aanroep:
[ code verwijderd ]
videoList is een array met video ID's.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 | function getYoutubeInfo(id) { var url = "http://gdata.youtube.com/feeds/api/videos/" + id + "?v=2&alt=json"; // Verander "done" door "then" zodat er nog meer // acties aan het Promise-object gekoppeld kunnen worden. // Geef het Promise-object terug zodat het binnen buildList // gebruikt kan worden. return $.getJSON( url ).then( function(data) { var returnObj = { title: data.entry.title.$t, uploader: data.entry.author[0].name.$t } console.log(returnObj); return returnObj; }); }; function buildList() { var tempElm; $.each(videoList, function(i, id) { tempElm = null; tempElm = $(".videoList .videoItem.hidden").clone().removeClass("hidden"); getYoutubeInfo( id ).then(function(info) { // info bevat de gegevens van returnObj uit getYoutubeInfo console.log( info.id ); tempElm.find("h4.vid-title").text( info.title ); tempElm.find("span.vid-uploader").text( info.uploader ); tempElm.find("p.vid-id").text("video id: " + info.id); }); // tempElm wordt toegevoegd voordat de Youtube-info is verwerkt! tempElm.appendTo("ul.videoList"); }); }; |
het werkt Thxquote:Op maandag 18 augustus 2014 14:49 schreef Aether het volgende:
[..]
De functie getYoutubeInfo zal niet direct de gegevens van Youtube terugkrijgen dus die zijn niet direct te gebruiken in buildList. Je kunt het Promise-object als functiewaarde teruggeven zodat het doorvoeren pas plaatsvindt wanneer de gegevens beschikbaar zijn.
[ code verwijderd ]
Nee, de functie getYoutubeInfo geeft een Promise-object terug. Dit is de waarde die $.getJSON teruggeeftquote:Op maandag 18 augustus 2014 14:54 schreef d4v1d het volgende:
[..]
Je returned nu twee keer in getYoutubeInfo() ?
1 2 3 4 5 6 7 8 9 10 11 12 | var result = $.getJSON( url ); result.then(function(data) { var returnObj = { title: data.entry.title.$t, uploader: data.entry.author[0].name.$t } console.log(returnObj); return returnObj; }); return result; |
Komt welquote:Op maandag 18 augustus 2014 15:08 schreef Catch22- het volgende:
Wel even een errorHandler toevoegen natuurlijk
dat zou ik even de boel zo bouwen dat je een array van id's kan doorsturen en je daar de info van krijgt, ipv voor alles een losse request te makenquote:Op maandag 18 augustus 2014 15:40 schreef d4v1d het volgende:
[..]
Komt wel
Maar ik denk dat ik het in php ga herschrijven omdat het uiteindelijk meer gedoe wordt met javascript enzo
(in de .each doet die dus http requests, en die each gaat weer vrolijk door voor de http request klaar is..
Geen zin om daar allemaal omheen te gaan bouwen
Dat je met javascript een array van video id's maakt en deze doorstuurt naar een php dingetje die de info ophaalt?quote:Op maandag 18 augustus 2014 15:42 schreef Catch22- het volgende:
[..]
dat zou ik even de boel zo bouwen dat je een array van id's kan doorsturen en je daar de info van krijgt, ipv voor alles een losse request te maken
neejoj n00b dit is TeaScriptquote:
teascript?quote:
quote:
Dafuq ?! wat is hier het nut van?:')quote:
dit werd vroeger volgens nog best vaak gebruikt, door crappy cms'en en developersquote:Op zondag 24 augustus 2014 00:15 schreef amvrosios het volgende:
[..]
Dafuq ?! wat is hier het nut van?:')
Heel benieuwd hoe je op dit idee bent gekomen...
toen was het ook al fout :-Pquote:Op zondag 24 augustus 2014 00:16 schreef Catch22- het volgende:
[..]
dit werd vroeger volgens nog best vaak gebruikt.
komt van reddit.quote:Op zondag 24 augustus 2014 00:15 schreef amvrosios het volgende:
[..]
Dafuq ?! wat is hier het nut van?:')
Heel benieuwd hoe je op dit idee bent gekomen...
Forum Opties | |
---|---|
Forumhop: | |
Hop naar: |