probleem met AJAX / Javascript naar js-object

Overzicht Reageren

Sponsored by: Vacatures door Monsterboard

Pipo Clown

Pipo Clown

13/10/2013 12:57:08
Quote Anchor link
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 :

Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
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));
}


Wanneer ik via een alert de response bekijk in javascript krijg ik het volgende terug:

Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
    {"functie":"test_functie","k11":"v11","k12":"v12"}


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)
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
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
        }
    });

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 ?
 
PHP hulp

PHP hulp

28/03/2024 14:03:56
 
Erwin H

Erwin H

13/10/2013 13:15:19
Quote Anchor link
Zorg dat je php script een json header mee stuurt:
Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
2
3
<?php
header( 'Content-Type: application/json' );
?>

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.
 
Pipo Clown

Pipo Clown

13/10/2013 20:08:20
Quote Anchor link
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.
 
Ger van Steenderen
Tutorial mod

Ger van Steenderen

13/10/2013 20:17:44
Quote Anchor link
Je zegt tegen jquery dat het data type json is, dus hoef je niks meer te parsen, dus:
Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
2
3
success: function(data) {
    alert(data.functie);
}
 
Pipo Clown

Pipo Clown

13/10/2013 21:58:38
Quote Anchor link
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.
 
Erwin Goossen

Erwin Goossen

13/10/2013 22:41:28
Quote Anchor link
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.
 
Pipo Clown

Pipo Clown

13/10/2013 23:51:25
Quote Anchor link
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 :

Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
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));
}


Dit is nu mijn javascript code :

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
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);
        }
    });
}


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.
 
Frank Nietbelangrijk

Frank Nietbelangrijk

14/10/2013 00:25:12
Quote Anchor link
hier even mijn basic example die gegarandeerd werkt. Bouw die eens langzaam om naar wat jij wilt.

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
<!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>


get_json.php:
Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
2
3
4
5
6
7
8
<?php
$test
= array('site' => 'phphulp', 'problem' => 'ajax');

header('Content-Type: application/json');

echo json_encode($test);

?>


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
 
Pipo Clown

Pipo Clown

14/10/2013 23:06:16
Quote Anchor link
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.
 
Frank Nietbelangrijk

Frank Nietbelangrijk

15/10/2013 00:27:32
Quote Anchor link
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.
 



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.