Deze twee lijnen
contentType: "application/json; charset=utf-8",
dataType: "json",
betekenen dat je verwacht dat de server JSON teruggeeft.
Om aan te duiden dat je JSON verstuurt, heb je die lijnen niet nodig. Dat is standaard.
JSON is de standaard manier waarop javascript objecten noteert.
Je moet dus gewoon die lijnen weglaten.
Ook die PHP headers zijn nergens voor nodig. Zelfde reden
Voor wat jij wil, volstaat dit
<?php
if ($_SERVER['REQUEST_METHOD'] === 'POST') {
file_put_contents('log.txt', print_r($_POST, true));
echo 'klaar';
exit;
}
?>
<script src="http://ajax.googleapis.com/ajax/libs/jquery/1.10.2/jquery.min.js"></script>
<script>
$(document).ready(function() {
$('#klik').click(function() {
var url = 'index.php'
$.ajax({
url: url,
type: "post",
data: { test: {userName: 'Jasper', password: 'test'}},
error: function (f, e, d) {
console.warn("ERROR: " + e, f, d);
},
success: serviceCallback
});
});
function serviceCallback(response) {
$('#messages').html(response);
}
});
</script>
<input type="button" value="klik" id="klik">
<div id="messages"></div>
Link gekopieerd
Jasper DS
23-12-2013 14:50
gewijzigd op 23-12-2013 14:53
Bedankt voor je antwoord Kris, de server moet wel degelijk JSON terugsturen die door middel van de parameters uit een database gehaald moet worden. Deze code heb ik nog niet geschreven ik wil eerst kunnen kijken welke parameters er binnen komen. De Json terug sturen is geen probleem, dat werkt.
De headers zijn er omdat ik de data van een ander domein haal en als de headers er dan niet staan krijg je de error:
No 'Access-Control-Allow-Origin' header is present on the requested resource.
[edit]
Als ik gewoon $_POST log in mijn log file krijg ik
14:52:33
Array
(
)
en dat moet dus geen lege array zijn!
[/edit]
Link gekopieerd
Jasper DS op 23/12/2013 14:50:14
... Deze code heb ik nog niet geschreven ik wil eerst kunnen kijken welke parameters er binnen komen. ...
Zolang de server geen JSON terug stuurt (En enkel JSON. Geen enkel ander karakter; geen echo 'test', ...) zal je in de error callback terecht komen.
---
Okay, dat verklaart nog niet waarom die file_put_contents niet werkt.
Noteer die data eens zoals ik het doe, op lijn 16 van mijn code.
Zie eens of dat helpt.
Link gekopieerd
Array blijft leeg maar $_POST bestaat wel
ajax
$.ajax({
type: App.config('use-service-stubs', false) ? "GET" : "POST",
url: url,
contentType: "application/json; charset=utf-8",
dataType: "json",
data: { test: {userName: 'Jasper', password: 'test'}},
error: function (f, e, d) {
console.warn("ERROR: " + e, f, d);
},
success: serviceCallback
});
api
<?php
header('Access-Control-Allow-Origin: *');
header('Access-Control-Allow-Headers: Origin, X-Requested-With, Content-Type, Accept');
header('content-type: application/json; charset=utf-8');
date_default_timezone_set('Europe/Brussels');
$myFile = 'log.txt';
$myContent = file_get_contents($myFile);
$myContent .= "\n" . date('G:i:s') . "\n";
if($_SERVER['REQUEST_METHOD'] === 'POST')
{
if(isset($_POST))
{
$myContent .= print_r($_POST, true);
echo json_encode($_POST);
}
else
{
$myContent .= '$_POST is not defined';
echo json_encode(array('error' => 'Post is not defined'));
}
}
else
{
$myContent .= 'No server_request';
$myContent .= print_r($_POST, true);
$myContent .= print_r($_GET, true);
echo json_encode(array('error' => 'No server_request'));
}
file_put_contents($myFile, $myContent);
[/code]
output in log.txt
15:06:04
Array
(
)
Link gekopieerd
Okay, ik heb het probleem gevonden.
PHP ziet de informatie niet als JSON. PHP heeft liefst dubbele quotes in de JSON string.
// Dit vindt PHP dus niet okay
"{'userName':'Jasper','password':'test'}"
// Dit wel
'{"userName":"Jasper","password":"test"}'
Kijk nog eens naar mij data string
(en vergeet mijn vorige advies. Dat was niet geschikt voor wat jij van plan was ...)
<?php
if ($_SERVER['REQUEST_METHOD'] === 'POST') {
header('Access-Control-Allow-Origin: *');
header('Access-Control-Allow-Headers: Origin, X-Requested-With, Content-Type, Accept');
header('content-type: application/json; charset=utf-8');
date_default_timezone_set('Europe/Brussels');
$myFile = 'log.txt';
$myContent = file_get_contents($myFile);
$myContent .= "\n" . date('G:i:s') . "\n";
$myContent .= print_r(json_decode($_POST['test']) , true);
file_put_contents($myFile, $myContent);
echo json_encode($_POST['test']); // $_POST .''.
exit;
}
?>
<script src="http://ajax.googleapis.com/ajax/libs/jquery/1.10.2/jquery.min.js"></script>
<script>
$(document).ready(function() {
$('#klik').click(function() {
var url = 'index.php'
$.ajax({
url: url,
type: "post",
dataType: 'json',
data: {test: '{"userName":"Jasper","password":"test"}'},
error: function (f, e, d) {
console.warn("ERROR: " + e, f, d);
},
success: serviceCallback
});
});
function serviceCallback(response) {
$('#messages').html(response);
}
});
</script>
<input type="button" value="klik" id="klik">
<div id="messages"></div>
Link gekopieerd
Jasper DS
23-12-2013 15:53
gewijzigd op 23-12-2013 15:58
In ajax de date op deze manier opgeven werkt ook niet:
data: { test: '{"userName": "Jasper", "password": "test"}'},
json_decode($_POST['test']) geeft niets
$_POST geeft array()
$_POST['test'] geeft niets
JSON hard coded in de API zetten:
$_POST['test'] = '{"userName": "Jasper", "password", "test"}';
geeft in de log
15:57:49
"{\"userName\": \"Jasper\", \"password\", \"test\"}"
Link gekopieerd
Ik krijg nu wel het resultaat dat ik verwacht.
Mijn scherm zegt dit (dus de Ajax respons):
{"userName":"Jasper","password":"test"}
De log zegt:
15:54:59
stdClass Object
(
[userName] => Jasper
[password] => test
)
Doe jij nog iets substantieel anders dan ik?
Link gekopieerd
Kijk eens in je browser wat er daadwerkelijk verstuurd wordt. Want zo te zien zit je probleem aan de client kant, niet aan de server kant.
Link gekopieerd
Jasper DS
23-12-2013 16:17
gewijzigd op 23-12-2013 16:22
output in console:
XHR finished loading: "http://localhost/project/aanwezigheden/api/login.php".
hoe kan ik de post waarden traceren in chrome?
Link gekopieerd
Developer Tools => tab "Network"
Daar kan je elk verzoek traceren.
Elke image, elke .css, ... geeft een lijntje met informatie.
Naar het lijntje onderaan kijken, en op klikken.
Eerst Developer Tools openen, dan de pagina verversen
Link gekopieerd