logische en/of syntactische fout in jquery-request naar API?

Overzicht Reageren

Sponsored by: Vacatures door Monsterboard

Henk Oudman

Henk Oudman

04/11/2016 21:14:10
Quote Anchor link
Hallo

I heb een probleem met het opvragen van waarden uit een API die JSON-bestanden levert (GET-request).
De URI eindigt op .../product_feeds/products.

Dit lukt wel bij een verwijzing naar nivo 2, bv. een property van een object, maar niet als er dieper in de structuur gezocht moet worden (zie onder)

Een voorbeeld van de structuur van het JSON-bestand (verkorte versie)

=====================================================
HTTP 200 OK
X-XSS-Protection: 1; mode=block

X-Request-Id: *****************************
X-Frame-Options: SAMEORIGIN
X-Runtime: 1.396538
x-content-type-options: nosniff
X-Powered-By: Phusion Passenger 5.0.30
Etag: *****************************
Status: 200 OK
Content-Type: application/json; charset=utf-8
Date: Fri, 04 Nov 2016 18:43:00 GMT
Server: Apache
Cache-Control: max-age=0, private, must-revalidate
Vary: Origin


{
"data": [
{
"product_nr": 6879,
"product_info": {
"description": "2000",
"total_stock": 6,
"year": 2016,
"brand_nr": 22,
"modified_at": "2016-09-28 11:30:01",
"created_at": "2016-07-22 11:30:01"
},
"articles": [
{
"color_nr": 33,
"color": "middelbruin",
"article_info": [
{
"sku_nr": 3727,
"barcode_nr": "4006879045",
"size": "8",
"stock": 1,
},
{
"sku_nr": 3728,
"barcode_nr": "4006879053",
"size": "8½",
"stock": 1,
},

]
}
]
}
],
"meta": {
"page": 1,
"page_size": 25,
"page_count": 1,
"total_count": 1
}
}
===============================================================================
I heb de volgende varianten geprobeerd in een jquery result function:

1)var size=data.data[0].articles[0].article_info[0].size;
console.log(size);
TypeError: data.data[0] is undefined

2)var size=data[0].articles[0].article_info[0].size;
console.log(size);
TypeError: data[0] is undefined

Overigens kan ik wel de lengte uitlezen van de array data met:
var len=data.data.length (output van console.log:0)

De meta-informatie kan wel worden getoond met:

var maxpage=data.meta.page_size;(output in console.log:25)

Wat gaat hier fout? Kan het een probleem zijn dat "data" hier op twee manieren wordet gebruikt, nl. eerst als verwijzing naar het data-object, en daarbinnen ook naar een array "data"? In een ander bestand met een URI eindigend op ../product_feeds/brands levert een verwijzing naar data.brands[0].brand_nr geen probleem op.
Ik hoop dat iemand mijn code kan verbeteren.
bij voorbaat dank.
Gewijzigd op 04/11/2016 21:15:54 door Henk Oudman
 
PHP hulp

PHP hulp

27/11/2024 17:45:11
 
Ivo P

Ivo P

04/11/2016 23:00:24
Quote Anchor link
is het niet

var size=data.data.articles.article_info.size;
 
Frank Nietbelangrijk

Frank Nietbelangrijk

05/11/2016 06:26:00
Quote Anchor link
De json die je in starttopic hebt staan is geen geldige json. Er staan een paar komma's te veel in.

De juiste json is:
Code (php)
PHP script in nieuw venster Selecteer het PHP script
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
{
    "data": [
        {
            "product_nr": 6879,
            "product_info": {
                "description": "2000",
                "total_stock": 6,
                "year": 2016,
                "brand_nr": 22,
                "modified_at": "2016-09-28 11:30:01",
                "created_at": "2016-07-22 11:30:01"
            },
            "articles": [
                {
                    "color_nr": 33,
                    "color": "middelbruin",
                    "article_info": [
                        {
                            "sku_nr": 3727,
                            "barcode_nr": "4006879045",
                            "size": "8",
                            "stock": 1
                        },
                        {
                            "sku_nr": 3728,
                            "barcode_nr": "4006879053",
                            "size": "8",
                            "stock": 1
                        }
                    ]
                }
            ]
        }
    ],
    "meta": {
        "page": 1,
        "page_size": 25,
        "page_count": 1,
        "total_count": 1
    }
}
 
Henk Oudman

Henk Oudman

05/11/2016 12:20:28
Quote Anchor link
De overbodige komma's waren het gevolg van een slordigheid bij het verkorten van het voorbeeld. De originele JSON-code is geheel in orde. Na veel proberen ben ik er achter gekomen wat de oorzaak was. De documentatie van de API-leverancier bevatte een voorbeeld dat ik heb gekopieerd waarin de data: was omgeven door komma's (single quotes). Nadat ik die had verwijderd kreeg ik ook waarden uit de data-array terug.


citaat:
JQuery voorbeeld POST request

Onderstaand voorbeeld voert een AJAX post request uit en geeft een alert van de de response header and body, vergelijkbaar met de manier zoals het in deze APIDOCS is geïmplementeerd.


$.ajax({
url: "https://demo.easyposonline.nl/api/v1/product_feeds/products",
headers: { "Authorization": "Token token=\"******************\" },
type: "POST",
data: '{ "name": "value", "nr": 12 }',
contentType: "application/json; charset=utf-8",
dataType: "json",

success: function(data,textStatus,xhr) {
(.............)
});
(einde citaat)

Mijn probleem is dus opgelost.
Gewijzigd op 05/11/2016 14:21:25 door Henk Oudman
 



Overzicht Reageren

 
 

Om de gebruiksvriendelijkheid van onze website en diensten te optimaliseren maken wij gebruik van cookies. Deze cookies gebruiken wij voor functionaliteiten, analytische gegevens en marketing doeleinden. U vindt meer informatie in onze privacy statement.