AJAX: hoe post ik mijn JSON-string?

Overzicht Reageren

Sponsored by: Vacatures door Monsterboard

Ventilatiesysteem Productontwikkelaar HBO WO Verwa

Samengevat: Zij bieden flexibele ventilatiematerialen, geluidsdempers, rookgasafvoer producten en industrieslangen. Ben jij een technisch productontwikkelaar? Heb jij ervaring met het ontwikkelen van nieuwe producten? Vaste baan: Technisch Productontwikkelaar HBO WO €3.000 - €4.000 Zij bieden een variëteit aan flexibele ventilatiematerialen, geluiddempers, rookgasafvoer producten, industrieslangen en ventilatieslangen voor de scheepsbouw. Met slimme en innovatieve materialen zorgen wij voor een gezonde en frisse leefomgeving. Deze werkgever is een organisatie die volop in ontwikkeling is met hardwerkende collega's. Dit geeft goede ontwikkelingsmogelijkheden. De branche van dit bedrijf is Techniek en Engineering. Functie: Voor de vacature als Technisch Productontwikkelaar Ede Gld HBO WO ga

Bekijk vacature »

Mark Markson

Mark Markson

20/06/2014 11:23:42
Quote Anchor link
Ik heb een hele simpele AJAX functie:

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
28
29
30
31
32
33
34
35
36
37
<?php
// PHP voor de kleuren
// Validate signup

function validateSignup(){
    // Get values
    var username = document.getElementById("pm_username").value;
    var
email = document.getElementById("pm_email").value;
    var
password = document.getElementById("pm_password").value;
    // Make new object
    var data = {};
    // Make array from object
    data['data'] = [];

    // If values are not empty...
    if(username !== "" || email !== "" || password !== ""){
        data['data'].push(email, username, password);
        // Convert data to JSON string and make new XMLHttpRequest
        var json = JSON.stringify(data['data']), xhr = new XMLHttpRequest();

        // Page to open
        xhr.open("POST", "ajax/signup.php", true);
        // Set header to POST
        xhr.setRequestHeader("Content-type", "application/x-www-form-urlencoded");
        // Send values
        xhr.send(json);
        console.log(json);

        xhr.onload = function(){
            console.log(xhr.responseText);
        }

    }
else{ // ...or throw new exception
        throw("Some thing was not filled in!");
    }
}


?>


Ik heb van de values dus een JSON-string gemaakt, maar hoe verzend ik die met PHP? $_POST['json'] doet niks en var_dump($_POST) geeft een lege array. Dit is mijn PHP-code:

Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
2
3
4
5
6
7
<?php

$json
= $_POST['email'];
echo $json;
echo "Test";
var_dump($_POST);
?>


Hij geeft wel "Test" terug, dus hij bereikt de pagina wel.

Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
2
3
4
5
<?php
<br />
<
b>Notice</b>:  Undefined index: json in <b>G:\usbwebserver\root\pokemonisle\ajax\signup.php</b> on line <b>3</b><br />
Test
?>


Dat geeft hij terug in de console...
Gewijzigd op 20/06/2014 11:24:16 door Mark Markson
 
PHP hulp

PHP hulp

16/04/2024 22:40:27
 
Gerhard l

gerhard l

20/06/2014 11:39:21
Quote Anchor link
Heb verder niet naar je AJAX code gekeken, maar je PHP error zegt waarschijnlijk dat je op regel 3 van singup.php iets uit een array wilt halen met de key 'json' maar die bestaat niet.

Edit: Dat is dus ook het probleem, sorry voor deze nutteloze reactie ;)
Gewijzigd op 20/06/2014 11:44:28 door gerhard l
 
Erwin H

Erwin H

20/06/2014 14:27:52
Quote Anchor link
Niet helemaal nutteloos Gerhard, want dat is namelijk wel het begin van de oplossing. Op het moment dat je zo'n foutmelding krijgt betekent het dus dat je een key niet in de POST array hebt die je wel verwacht. De eerste actie die je dan zou moeten nemen is om gewoon even de POST array naar het scherm te printen, zodat je direct kan zien hoe die eruit ziet. En ik denk dat je er dan achter komt dat het er allemaal heel anders uit ziet. Dit is namelijk wat je doet:
Code (js)
PHP script in nieuw venster Selecteer het PHP script
1
2
3
4
var data = {};
data['data'] = [];
data['data'].push(email, username, password);
var json = JSON.stringify(data['data']);

Het effect hiervan is dat data['data'] een array is met numerieke keys. Als je dit dus verstuurd, dan krijg je niet een key 'email' in de POST array. Die key bestaat namelijk helemaal niet.

Wat ik zou doen is het volgende:
Code (js)
PHP script in nieuw venster Selecteer het PHP script
1
2
3
4
var data = {};
data.email = email;
data.username = username;
data.password = password;

En vervolgens data versturen (eventueel via stringify geserialiseerd). Dan heb je een javascript object met properties die wel als een key in de POST array terecht zullen komen.
 
Ger van Steenderen
Tutorial mod

Ger van Steenderen

20/06/2014 15:43:05
Quote Anchor link
Als je in combinatie met application/x-www-form-urlencoded content type een request verzendt, moet je het als een query string opbouwen.
Code (js)
PHP script in nieuw venster Selecteer het PHP script
1
2
3
4
5
6
7
8
9
10
11
var xhr = new XMLHttpRequest();
            var data = "username=" + encodeURI(username) +
                        "&email=" + encodeURI(email);
            xhr.onreadystatechange = function(){
                if (xhr.readyState == 4 && xhr.status==200) {
                    alert (xhr.responseText);
                }
            }

            xhr.open("POST", "ajax/signup.php", true);
            xhr.setRequestHeader("Content-Type", "application/x-www-form-urlencoded; charset=UTF-8");
            xhr.send(data)
Gewijzigd op 20/06/2014 15:44:39 door Ger van Steenderen
 



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.