Hi,

Ik ben een beetje aan het kijken naar Json. Maar ik loop op een stukje vast. Kan zijn dat ik totaal verkeerd bezig ben, maar toch even hier navraag doen.

Ik probeer via Json data te versturen naar een php bestand zodat ik deze fijn kan uitlezen. Echter, het verzenden werkt (via firebug gecontroleerd) maar eenmaal in het php bestand kan ik het geheel niet meer terug vinden. Ik verwachte het in de $_POST maar het zijn allemaal NULL waardes.

Zie hier mijn stukje javascript die het Json zou moeten verzenden:

	$('[name="loginSubmit"]').bind('click', function(e) {
		$.ajax({
			type: "POST",
			url: 'Backend/Ajax/Login/LoginHandler.php',
			contentType: "application/json; charset=utf-8",
			dataType: "json",
			data:  JSON.stringify('{Data: {Username: "' + $('[name="txtUsername"]').val() + '", Password: "' + $('[name="txtPassword"]').val() + '", DailyToken: "' + $('[name="txtDailyToken"]').val() + '", Captcha: "' + $('[name="txtCaptcha"]').val() + '"}}'),
			success: function(json) {
				//$("#success").html("json.length=" + json.length);
				itemAddCallback(json);
				
				alert(json);
			},
			error: function (XMLHttpRequest, textStatus, errorThrown) {
				$("#error").html(XMLHttpRequest.responseText);
			}
		});
		e.preventDefault();
	});


In de LoginHandler heb ik al de $_POST gedumpt, de $_GET gedumped en zelfs $_REQUEST. Maar alles is leeg.

Nu mijn vraag, na ongeveer 2 uur de servers van google te belasten heb ik alleen maar voorbeelden gevonden die andersom werkten. Dus een Json string terug zenden naar javascript waardoor je dus met die objecten kunt werken. Maar ik kan nergens een goed voorbeeld vinden dat je juist je data wilt verzenden en het via PHP wilt uitlezen. Hoort dat zo? Is Json alleen maar bedoelt om objecten naar javascript te versturen, of zou het ook de andere weg moeten kunnen (welke ik nu dus probeer).

Kusje.
Gebruik je jQuery? Zo ja, dan kan je toch $.post gebruiken? Zie eens naar de documentatie daarvan, en dan vooral die voorbeelden onderaan voor hoe je je data argument moet vullen.

Je ziet de output in Firebug zeg je, als het goed is kan je dan ook zien of de data verzonden is, als body (of gewoon data) van de request. In wat voor formaat is dat? Kan je dat eens kopieren en plakken hier?

PHP zelf kan die body omzetten in waardes in een $_POST array wanneer het als querystring is doorgestuurd (enctype:urlencodednogwat, standaard), of enctype:multipart/form-data-oid (bij bestanden uploaden). Als het in een andere indeling is, dan zal je het zelf moeten inlezen. Volgens mij kan dat via de php://input stream. Of via $HTTP_POST_DATA, al werkt die bij mij iig nooit.
<?php
$post = file_get_contents('php://input');
?>
Je kan het JSON.stringify() stuk weglaten, data accepteert ook objecten. Maar dit zou natuurlijk niets uit moeten maken.
Ik denk dat het komt door je datatypes en headers als JSON, je post de data niet op de juiste manier volgens mij.
Heren, dank voor de reacties. Ik heb heb het maar gedaan via $.post();


		$.post( 
				'Backend/Ajax/Login/LoginHandler.php',
				{ 'Data': 
					{	'Username': $('[name="txtUsername"]').val(), 
						'Password': $('[name="txtPassword"]').val(), 
						'DailyToken': $('[name="txtDailyToken"]').val(),
						'Captcha': $('[name="txtCaptcha"]').val()
					}
				},
				function(json) {
					console.log(json);
				}, 
			'json');


Deze werkt. Echter rust mij nu nog de vraag, of het kan dat ik een login via json laat lopen. Sessies aanmaken etc etc word dan op de achtergrond gedaan. Of is er iets wat deze manier onveilig maakt?

Reageren