Avatar billede dotcom1 Nybegynder
06. januar 2016 - 11:39 Der er 10 kommentarer og
1 løsning

Javascript for loop fejl - parameter er undefined

Hej.

Jeg har dette script, som henter company updates fra LinkedIn. Det virker sådan set - jeg får alle updates vist i console, men samtidig får jeg denne fejl: "Uncaught TypeError: Cannot read property 'values' of undefined" i linjen: var resValues = result.values;

Hvorfor og hvordan fikser jeg det?


Min kode:

function onLinkedInLoad() {
    IN.Event.on(IN, "auth", onLinkedInAuth);
}

function onLinkedInAuth() {
    var cpnyID = 2414183; //LinkedIn's testDevCo
    IN.API.Raw("/companies/" + cpnyID + "/updates?event-type=status-update&start=0&count=10&format=json")
        .result(displayUpdates);
}

function displayUpdates(result) {
    var resValues = result.values;
    for (var i in resValues) {
        var share = resValues[i].updateContent.companyStatusUpdate.share;
        console.log(share);
    }
}
Avatar billede jakobdo Ekspert
06. januar 2016 - 14:15 #1
Mit bud er du har et "result" der er undefined.
Så måske du forsøger at tilgå et result for "langt", altså length + 1 eller lign?
Avatar billede dotcom1 Nybegynder
06. januar 2016 - 14:27 #2
Tak for svar.
Hmm ja, måske. Jeg vil gerne vise dig hele koden, men den indeholder en api key, mv. som jeg helst ikke vil have her på siden... Er der en måde, jeg kan sende en url til dig på?

Tak igen.
Mvh.
Avatar billede jakobdo Ekspert
06. januar 2016 - 15:39 #3
Som besked via exp ?
Så er det "kun" dig og mig der kan se det.
Avatar billede jakobdo Ekspert
06. januar 2016 - 18:41 #4
I din displayUpdates function, har du "result"
Prøv evt. at lav en console.log(result);
Og se hvad den smider ud?
Når det er sagt, kan du jo evt. lave et "loop" ala det fra stackoverflow ?
Avatar billede dotcom1 Nybegynder
06. januar 2016 - 19:06 #5
Den printer bare "undefined" i konsollen.
Jeg har ændret loopet som jeg tror det skal være, men nu viser den intet - og fejlen er der stadig:

function displayUpdates(result) {
    console.log(result);
    var resValues = result.values;
    if (resValues.educations > 0) {
        for (var i = 0; i < resValues; i++) {
            var share = resValues[i].updateContent.companyStatusUpdate.share;
            console.log(share);
        }
    }
}
Avatar billede jakobdo Ekspert
06. januar 2016 - 19:28 #6
Prøv at "drop" resValues og arbejd direkte på result.
Hvis du laver: result._total, viser den så ikke noget ?
Avatar billede dotcom1 Nybegynder
06. januar 2016 - 20:29 #7
Hvis jeg kun skriver dette:

function displayUpdates(result) {
    console.log(result);
}

- så skriver den i console først "undefined"  - og sekundet efter hele result-objektet, som ser korrekt ud. Er det ikke mærkeligt? Hvorfor starter den med at være undefined - for så at virke? Er det fordi der går for lang til før LinkedIn's api svarer?

Du kan se det på mit testlink.
Avatar billede jakobdo Ekspert
06. januar 2016 - 20:32 #8
Hmm.. Det lugter lidt af du måske "trigger" kaldet til api 2 gange.
Avatar billede dotcom1 Nybegynder
06. januar 2016 - 20:55 #9
Ja, du har ret.

Længere oppe i koden, havde jeg dette:

<script type="text/javascript" src="https://platform.linkedin.com/in.js">
    api_key: xxxxxxxxxxxx
    onLoad: onLinkedInLoad, onLinkedInAuth, displayUpdates
    authorize: true
</script>

Da jeg fjernede displayUpdates fra onLoad var alt som det skulle være. :-)

Tak for hjælpen, Jakob. Du sporede mig ind på problemet. Svar gerne.
Avatar billede jakobdo Ekspert
06. januar 2016 - 21:02 #10
Svar!
Avatar billede jakobdo Ekspert
07. januar 2016 - 11:28 #11
Takker for point.
Avatar billede Ny bruger Nybegynder

Din løsning...

Tilladte BB-code-tags: [b]fed[/b] [i]kursiv[/i] [u]understreget[/u] Web- og emailadresser omdannes automatisk til links. Der sættes "nofollow" på alle links.

Loading billede Opret Preview
Kategori
Vi tilbyder markedets bedste kurser inden for webudvikling

Log ind eller opret profil

Hov!

For at kunne deltage på Computerworld Eksperten skal du være logget ind.

Det er heldigvis nemt at oprette en bruger: Det tager to minutter og du kan vælge at bruge enten e-mail, Facebook eller Google som login.

Du kan også logge ind via nedenstående tjenester