probleem met AJAX / Javascript naar js-object
Ik heb eeb probleem met AJAX / Javascript waar ik maar niet uit kom, het gaat om de data overdracht.
Via AJAX roep ik de volgende functie aan in PHP :
Wanneer ik via een alert de response bekijk in javascript krijg ik het volgende terug:
Dit ziet er naar mijn idee nog goed uit.
Nu wil ik dit omgezet hebben naar een Object zodat ik m.b.v. object.key de waarde van dat veld uit kan lezen en dit krijg ik niet voor elkaar.
JSON.parse(data) geeft een foutmelding
JSON.parse(JSON.stringify(data)) geeft een string terug i.p.v. een object.
Hieronder een stukje van de Javascript code:
Voor de duidelijkheid heb ik achter de coderegels aangegeven of iets werkt of niet.
Wanneer ik de commentaarstrepen voor "dataType : 'json'" weg haal krijg ik een parse-error te zien.
In het "echte" programma krijg ik veel meer data terug dan hier in het voorbeeld programma, vandaar mijn wens om met de keys te kunnen werken.
Zoals te zien, wanneer ik een actie uitvoer op een lokale array binnen JS (t2) werkt het wel, wanneer ik hetzelfde doe met een array welke terug komt van PHP (data) werkt het niet.
Wie helpt mij uit de brand ?
Via AJAX roep ik de volgende functie aan in PHP :
Code (php)
1
2
3
4
5
6
7
8
9
2
3
4
5
6
7
8
9
function register()
{
$test = array();
$test['functie'] = 'test_functie';
$test['k11'] = 'v11';
$test['k12'] = 'v12';
echo(JSON_encode($test));
}
{
$test = array();
$test['functie'] = 'test_functie';
$test['k11'] = 'v11';
$test['k12'] = 'v12';
echo(JSON_encode($test));
}
Wanneer ik via een alert de response bekijk in javascript krijg ik het volgende terug:
Dit ziet er naar mijn idee nog goed uit.
Nu wil ik dit omgezet hebben naar een Object zodat ik m.b.v. object.key de waarde van dat veld uit kan lezen en dit krijg ik niet voor elkaar.
JSON.parse(data) geeft een foutmelding
JSON.parse(JSON.stringify(data)) geeft een string terug i.p.v. een object.
Hieronder een stukje van de Javascript code:
Code (php)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
var tst = {}
tst['functie'] = 'register1',
tst['k1'] = 'v1';
tst['k2'] = 'v2';
var t2 = tst;
$.ajax({
url : url,
data : t2,
method : 'POST',
// dataType: 'json', // Choosing a JSON datatype
success : function(data) {
alert('Data : '+data);
alert('Stringify : '+JSON.stringify(data));
// alert('Parsed : '+JSON.parse(data)); // Geeft foutmelding
alert('functie : '+jQuery.parseJSON(JSON.stringify(data)).functie); werkt niet (undefined0
ex = jQuery.parseJSON(JSON.stringify(t2));
alert('Ex : '+ex.functie); // Werkt correct
}
});
tst['functie'] = 'register1',
tst['k1'] = 'v1';
tst['k2'] = 'v2';
var t2 = tst;
$.ajax({
url : url,
data : t2,
method : 'POST',
// dataType: 'json', // Choosing a JSON datatype
success : function(data) {
alert('Data : '+data);
alert('Stringify : '+JSON.stringify(data));
// alert('Parsed : '+JSON.parse(data)); // Geeft foutmelding
alert('functie : '+jQuery.parseJSON(JSON.stringify(data)).functie); werkt niet (undefined0
ex = jQuery.parseJSON(JSON.stringify(t2));
alert('Ex : '+ex.functie); // Werkt correct
}
});
Voor de duidelijkheid heb ik achter de coderegels aangegeven of iets werkt of niet.
Wanneer ik de commentaarstrepen voor "dataType : 'json'" weg haal krijg ik een parse-error te zien.
In het "echte" programma krijg ik veel meer data terug dan hier in het voorbeeld programma, vandaar mijn wens om met de keys te kunnen werken.
Zoals te zien, wanneer ik een actie uitvoer op een lokale array binnen JS (t2) werkt het wel, wanneer ik hetzelfde doe met een array welke terug komt van PHP (data) werkt het niet.
Wie helpt mij uit de brand ?
Zorg dat je php script een json header mee stuurt:
En laat dan het dataType in de ajax call staan. Dat zou, als de output puur JSON is en niets anders, het probleem moeten verhelpen.
En laat dan het dataType in de ajax call staan. Dat zou, als de output puur JSON is en niets anders, het probleem moeten verhelpen.
Toevoeging van de header aan het PHP bestand heeft geen invloed gehad. Zoals je in de code kunt zien wordt er echt zuivere JSON geretourneerd.
Zodra ik in javaScript het "dataType : json" activeer zit ik weer met de parse-error en werkt er niets meer.
Zodra ik in javaScript het "dataType : json" activeer zit ik weer met de parse-error en werkt er niets meer.
Je zegt tegen jquery dat het data type json is, dus hoef je niks meer te parsen, dus:
Ik maak morgen even 2 uiterst korte test-functies.
Eén voorjavascript en één voor PHP.
Kijken of het dan wel lukt.
Dan kan ik eventueel de volledige functies hier plaatsen.
Eén voorjavascript en één voor PHP.
Kijken of het dan wel lukt.
Dan kan ik eventueel de volledige functies hier plaatsen.
Pipo,
Heb je al geprobeerd om in de register functie een exit() na de echo te plaatsen?
Dit zorgt er namelijk voor dat de call direct word gestopt. Wil nog wel eens werken in dit soort use cases.
Heb je al geprobeerd om in de register functie een exit() na de echo te plaatsen?
Dit zorgt er namelijk voor dat de call direct word gestopt. Wil nog wel eens werken in dit soort use cases.
Ik heb de code even geminimaliseerd waardoor het erg eenvoudig wordt voor deren om te zien of zij hetzelfde probleem hebben.
Dit is nu mijn PHP-code :
Dit is nu mijn javascript code :
Het resultaat van een aanroep van het javascript is de volgende melding :
"AJAX fout : parseerror"
Waarom ? Ik heb geen idee.
Ik heb de functie aangeroepen met zowel de array tst als met json.stringify(tst) als invoer parameter.
Dit is nu mijn PHP-code :
Code (php)
1
2
3
4
5
6
7
8
9
10
11
2
3
4
5
6
7
8
9
10
11
function register()
{
header( 'Content-Type: application/json' );
$test = array();
$test['functie'] = 'test_functie';
$test['k11'] = 'v11';
$test['k12'] = 'v12';
echo(JSON_encode($test));
}
{
header( 'Content-Type: application/json' );
$test = array();
$test['functie'] = 'test_functie';
$test['k11'] = 'v11';
$test['k12'] = 'v12';
echo(JSON_encode($test));
}
Dit is nu mijn javascript code :
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
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
function register()
{
var url = 'ajax/ajax_pagina.php';
var tst = {}
tst['functie'] = 'register',
tst['k1'] = 'v1';
tst['k2'] = 'v2';
var tst2 = JSON.stringify(tst);
$.ajax({
url : url,
cache : false,
data : tst2,
method : 'POST',
dataType: 'JSON', // Choosing a JSON datatype
success : function(data) {
alert(data.functie);
},
error: function (data, status, jqXHR) {
alert("AJAX fout : " + status);
}
});
}
{
var url = 'ajax/ajax_pagina.php';
var tst = {}
tst['functie'] = 'register',
tst['k1'] = 'v1';
tst['k2'] = 'v2';
var tst2 = JSON.stringify(tst);
$.ajax({
url : url,
cache : false,
data : tst2,
method : 'POST',
dataType: 'JSON', // Choosing a JSON datatype
success : function(data) {
alert(data.functie);
},
error: function (data, status, jqXHR) {
alert("AJAX fout : " + status);
}
});
}
Het resultaat van een aanroep van het javascript is de volgende melding :
"AJAX fout : parseerror"
Waarom ? Ik heb geen idee.
Ik heb de functie aangeroepen met zowel de array tst als met json.stringify(tst) als invoer parameter.
hier even mijn basic example die gegarandeerd werkt. Bouw die eens langzaam om naar wat jij wilt.
get_json.php:
Toevoeging op 14/10/2013 00:38:14:
die javascript functie van jou werkt ook bij mij. is je url 'ajax/ajax_pagina.php' wel juist en is de url wel te benaderen?
wat gebeurd er als je http://jouwdomein.nl/ajax/ajax_pagina.php in je browser bezoekt?
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
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
<!doctype html>
<html>
<head>
<meta charset="utf-8">
<title>Ajax with JQuery</title>
<script src="http://ajax.googleapis.com/ajax/libs/jquery/1.10.2/jquery.min.js"></script>
<script>
$( document ).ready(function() {
$('#my-button').click(function(e) {
$.ajax({
url: "get_json.php",
}).done(function(data) {
$('#my-div').html(data.site + ' - ' + data.problem);
});
});
});
</script>
</head>
<body>
<button id="my-button" >Klik!</button>
<div id="my-div" ></div>
</body>
</html>
<html>
<head>
<meta charset="utf-8">
<title>Ajax with JQuery</title>
<script src="http://ajax.googleapis.com/ajax/libs/jquery/1.10.2/jquery.min.js"></script>
<script>
$( document ).ready(function() {
$('#my-button').click(function(e) {
$.ajax({
url: "get_json.php",
}).done(function(data) {
$('#my-div').html(data.site + ' - ' + data.problem);
});
});
});
</script>
</head>
<body>
<button id="my-button" >Klik!</button>
<div id="my-div" ></div>
</body>
</html>
get_json.php:
Code (php)
Toevoeging op 14/10/2013 00:38:14:
die javascript functie van jou werkt ook bij mij. is je url 'ajax/ajax_pagina.php' wel juist en is de url wel te benaderen?
wat gebeurd er als je http://jouwdomein.nl/ajax/ajax_pagina.php in je browser bezoekt?
Gewijzigd op 14/10/2013 00:25:31 door Frank Nietbelangrijk
Ik heb met je basic in ieder geval iets werkends gekregen.
Vervolgens het javascript uitgebreid met alles wat ik nodig heb en met een test stukje PHP werkt het nog steeds.
Ben nu bezig in een poging ook het PHP-deel zo te krijgen als ik het nodig heb.
In een losbestand werkt het zonder errors, in een functie geplakt krijg ik weer de parse error dus ik denkdat er nog ergens een php-foutje in zit.
Vervolgens het javascript uitgebreid met alles wat ik nodig heb en met een test stukje PHP werkt het nog steeds.
Ben nu bezig in een poging ook het PHP-deel zo te krijgen als ik het nodig heb.
In een losbestand werkt het zonder errors, in een functie geplakt krijg ik weer de parse error dus ik denkdat er nog ergens een php-foutje in zit.
fijn om te lezen dat het tot zover werkt en als je de relevante code plaatst waar je denkt dat het fout gaat dan kunnen we je misschien helpen.




