logische en/of syntactische fout in jquery-request naar API?
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
var size=data.data.articles.article_info.size;
De juiste json is:
Code (php)
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
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
}
}
"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
}
}
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