probleem met AJAX / Javascript naar js-object
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 ?
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.
Zodra ik in javaScript het "dataType : json" activeer zit ik weer met de parse-error en werkt er niets meer.
Eén voorjavascript en één voor PHP.
Kijken of het dan wel lukt.
Dan kan ik eventueel de volledige functies hier plaatsen.
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.
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.
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
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.