Opslaan & Ophalen jQuery "named" array
Ik heb problemen met het ophalen van een array in met jQuery.
Met jQuery 'POST' ik data zoals
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
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
currentCookies = [];
//for loop
var tCookie = {
function: tFunc,
name: tName,
val: tVal
};
currentCookies.push(tCookie);
//...
var tRow = lastRow + 1;
var tProfile = ['val1','val2','val3'];
var tCookies = currentCookies;
};
var postData = {
curRow: tRow,
profile: tProfile,
cookies: tCookies
}
//for loop
var tCookie = {
function: tFunc,
name: tName,
val: tVal
};
currentCookies.push(tCookie);
//...
var tRow = lastRow + 1;
var tProfile = ['val1','val2','val3'];
var tCookies = currentCookies;
};
var postData = {
curRow: tRow,
profile: tProfile,
cookies: tCookies
}
Deze data wordt opgeslagen in m'n database mbv. json_encode()
Nou heb ik op mijn backend geen problemen, ook het genereren van formulieren en tabellen geen probleem.
Code (php)
1
2
2
if(array_key_exists('cookies',$profile)) {
if(is_array($profile['cookies']) && count($profile['cookies']) > 0) {
if(is_array($profile['cookies']) && count($profile['cookies']) > 0) {
Het probleem zit m in het weer ophalen in jQuery.
Ik heb weer een POST actie met jQuery en het resultaat vanuit php:
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
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
PHP:
die(
json_encode(
array(
'result' => true,
'cookies' => $curProfile[$myKey]['cookies']
)
)
);
---
jQuery
---
console.log(tResult);
JSON:
result: true
cookies: {...}
0 : {
function: 'analytic'
name: '_ga'
value: 'asdasdasd'
}
1 : {
function: 'analytic'
name: '_ga'
value: 'asdasdasd'
}
die(
json_encode(
array(
'result' => true,
'cookies' => $curProfile[$myKey]['cookies']
)
)
);
---
jQuery
---
console.log(tResult);
JSON:
result: true
cookies: {...}
0 : {
function: 'analytic'
name: '_ga'
value: 'asdasdasd'
}
1 : {
function: 'analytic'
name: '_ga'
value: 'asdasdasd'
}
Zo ver zo goed dus...
Nou is het probeel: $.isArray(tResult['cookies']) => false...
console.log(typeof(tResult['cookies'])); => Object
console.log(tResult['cookies'].length; => undefined
Wie kan mij hiermee helpen, het enige wat ik wil is dat 'currentCookies' deze cookies weer inlaad zoals ik ze voorheen opgebouwd heb in jQuery om weer te kunnen toevoegen of verwijderen vanuit jQuery en daarna sla ik t weer terug op.
Ik gebruik ook 'unnamed' array en dat werkt wel perfect.
Gewijzigd op 06/09/2019 08:25:01 door Dennis WhoCares
ja ik weet het, maar weet niet goed hoe ik het anders moet uitleggen.
Het probleem zit m in de frontend, en ik gebruik json_encode() om de data in json te hebben zodat de jQuery m kan lezen. (heb ook de 2e param gebruikt bij de encode, maar helaas, precies hetzelfde)
Code (php)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
//ajax POST request
complete: function (data) {
var tResult = JSON.parse(data.responseText);
console.log(tResult)
if("cookies" in tResult) {
console.log('has cookies!');
console.log('Type of tResult: ' + typeof(tResult));
console.log(Type of cookies: ' + typeof(tResult['cookies']);
console.log(tResult['cookies']);
var tmpCookies = tResult['cookies'];
console.log('Amount : ' + tmpCookies.length);
if($.isArray(tResult['cookies'])) {
///
} else {
console.log('cookies seems not to be an array');
}
complete: function (data) {
var tResult = JSON.parse(data.responseText);
console.log(tResult)
if("cookies" in tResult) {
console.log('has cookies!');
console.log('Type of tResult: ' + typeof(tResult));
console.log(Type of cookies: ' + typeof(tResult['cookies']);
console.log(tResult['cookies']);
var tmpCookies = tResult['cookies'];
console.log('Amount : ' + tmpCookies.length);
if($.isArray(tResult['cookies'])) {
///
} else {
console.log('cookies seems not to be an array');
}
Console output:
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
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
JSON:
result: true
cookies: {...}
0 : {
function: 'analytic'
name: '_ga'
value: 'asdasdasd'
}
1 : {
function: 'analytic'
name: '_ga'
value: 'asdasdasd'
}
has cookies!
Type of tResult: Object
Type of cookies: object
Object { 0: {}, 1: {} }
//opengeklapt
0: Object { function: "analytic", name: "_ga", value: "asdasdasd" }
1: Object { function: "analytic", name: "_ga", value: "asdasdasd" }
<prototype>: Object { ... }
Amount : undefined
cookies seems not to be an array
result: true
cookies: {...}
0 : {
function: 'analytic'
name: '_ga'
value: 'asdasdasd'
}
1 : {
function: 'analytic'
name: '_ga'
value: 'asdasdasd'
}
has cookies!
Type of tResult: Object
Type of cookies: object
Object { 0: {}, 1: {} }
//opengeklapt
0: Object { function: "analytic", name: "_ga", value: "asdasdasd" }
1: Object { function: "analytic", name: "_ga", value: "asdasdasd" }
<prototype>: Object { ... }
Amount : undefined
cookies seems not to be an array
Zoals ik zie: is het nu geen normale 'array'
De cookies heb ik opgebouwd als test:
Code (php)
1
2
3
4
5
2
3
4
5
var tmpTest = [];
tmpTest.push({ function: "cookie1", name: "asdasd", value: "asdasdasd" });
tmpTest.push({ function: "cookie2", name: "qweqwe", value: "qweqweqwe" });
console.log(tmpTest);
if($.isArray(tmpTest)) { console.log('tmpTest is array! Amount: ' + tmpTest.length); }
tmpTest.push({ function: "cookie1", name: "asdasd", value: "asdasdasd" });
tmpTest.push({ function: "cookie2", name: "qweqwe", value: "qweqweqwe" });
console.log(tmpTest);
if($.isArray(tmpTest)) { console.log('tmpTest is array! Amount: ' + tmpTest.length); }
Console output:
In de data die ik later ophaal zoals voorheen omschreven is het geen 'Array' maar 'Object' en heeft geen omsluitende [ ] maar { }
Gewijzigd op 06/09/2019 10:20:01 door Dennis WhoCares
Wat is de output als je tussen regel 2 en 3 plaatst:
console.log(data);
Ivo P op 06/09/2019 10:19:26:
Wat zit er in "data"
Wat is de output als je tussen regel 2 en 3 plaatst:
console.log(data);
Wat is de output als je tussen regel 2 en 3 plaatst:
console.log(data);
Code (php)
1
responseText: "{\"result\":\"true\",\"subject\":\"testingiCookies\",\"desc\":\"\",\"cookies\":{\"0\":{\"function\":\"analytic\",\"name\":\"_ga\",\"value\":\"asdasdasd\"},\"2\":{\"function\":\"analytic\",\"name\":\"_ga\",\"value\":\"asdasdasd\"}},\"gegevens\":\"[{\\\"value\\\":\\\"testingiCookies\\\",\\\"bijzonder\\\":0,\\\"uitzonderingen\\\":[]}]\"}"
Ik gebruik dit vrijwel overal, maar is de eerste keer dat ik echt 'named' index gebruik in een array, welke vervolgens als array opgeslagen is.
Aan de PHP kant gaat alles prima, zit nu alleen hiemee te klooien en ligt denk ik aan de omringende {} van cookies, dat die eigenlijk [] horen te zijn
Gewijzigd op 06/09/2019 10:25:54 door Dennis WhoCares
Code (php)
1
2
3
4
2
3
4
<?php
$content = json_decode($_POST['data'], true); // geen idee waar je data vandaan komt in je AJAX.
print_r($content);
?>
$content = json_decode($_POST['data'], true); // geen idee waar je data vandaan komt in je AJAX.
print_r($content);
?>
Gewijzigd op 06/09/2019 10:26:41 door - Ariën -
Ik zie in de responseText dat de 'array' van cookies de index niet klopt en lijkt nu alsof de 'hoofd' array, nu index heeft gekregen.
Waarschijnlijk door testen van het verwijderen van tussenliggende cookies en heeft het een indexnr gekregen.
Code (php)
1
2
3
4
5
6
7
8
9
10
11
12
2
3
4
5
6
7
8
9
10
11
12
$cookies = array(
"1" => array (
function: "functie hier",
name: "name hier",
value: "value hier"
),
"2" => array(
function: "functie hier",
name: "name hier",
value: "value hier"
)
)
"1" => array (
function: "functie hier",
name: "name hier",
value: "value hier"
),
"2" => array(
function: "functie hier",
name: "name hier",
value: "value hier"
)
)
Hoort natuurlijk te zijn:
Maar een array hoort een key te hebben, en dat is in jouw geval niet zo.
Wat ik daar nog meen te missen: een header.
als je meegeeft
Herkent je browser het beter als een json output.
Voordeel is dan ook dat je als je de betreffende url aanroept in je browser, je ook overzichtelijk json op je scherm krijgt (in elk geval bij mijn FireFox en Chrome)
Ik heb niks weg gehaald uit de posts :)
Ik heb idd geen header aangegeven in m'n php. Zal dat eens ff overal toevoegen daar waar ik json response terug geef.
@Arien,
een array heeft inderdaad altijd een key/index, en je kan eventueel zelf een 'named' key/index maken inderdaad.
Als je m'n vorige bericht doorneem, zie je het verschil, en bij de 'named' key/index gaat het fout in jQuery, dan ziet jQuery het als een object en geen array.
Dan moet ik met een .each() loop werken, wat ik niet wil.
Die named index komt verwacht ik omdat ik simpelweg een unset() doe op de cookies array op index 1 en niet terug sorteerde.
Heb net klein foutje gemaakt in m'n php script en nou zit ik heel ff tegen 'resource limit' te hikken en kan ik eventjes niet verder :'-D
Gaat goed komen, heb met jullie hulp t probleem gevonden!