Ik heb een hele simpele AJAX functie:

<?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:

<?php

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

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

<?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...
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 ;)
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 lang=js]
var data = {};
data['data'] = [];
data['data'].push(email, username, password);
var json = JSON.stringify(data['data']);
[/code]
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 lang=js]
var data = {};
data.email = email;
data.username = username;
data.password = password;
[/code]
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.
Als je in combinatie met application/x-www-form-urlencoded content type een request verzendt, moet je het als een query string opbouwen.
[code lang="js"]
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)
[/code]

Reageren