Hallo,

ik moet data (JSON) van domein x naar domein z krijgen a.d.h.v. enkele parameters (JSON) via ajax. Hiervoor probeer ik op domein x een PHP api te schrijven die domein z kan aanspreken met ajax.

ajax op domein z:

	$.ajax({
            type: "POST",
            url: url, // url=  domainx.com/api/login.php
            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 op domein z:

<?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";
$myContent .= print_r(json_decode($_POST['test']) , true);
echo $_POST['test'];
file_put_contents($myFile, utf8_encode($myContent));

[/code]

helaas blijft mijn log file dus leeg, $_POST blijkt leeg te zijn hoewel hier wel degelijk data in zou moeten zitten.

Wie kan mij helpen?
Chrome werk ik zelf niet mee, dus precies zeggen kan ik het niet, maar waarschijnlijk via de developers tools. De meeste brwosers hebben wel een window waarin je kan zien welke data er verstuurd is, met welke headers etc.
Jasper DS op 23/12/2013 15:53:16

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\"}"



data: { test: '{"userName": "Jasper", "password": "test"}'},
Die test moet ook tussen dubbele quotes.

@Kris volgens mij was het zo dat JSON vind dat er dubbele quotes gebruikt moeten worden en houdt PHP zich daar gewoon aan.
@LEDfan nee, die test is de key van de POST parameter en hoeft niet tussen quotes.
Omdat je de contentType verandert, zal PHP niet weten wat hij aanmoet met deze contentType. Als het goed is is de data wel zichtbaar op deze manier:

<?php
file_get_contents('php://input');
?>

Haal de contentType dus weg als je het in $_POST wil hebben.
Erwin H op 23/12/2013 16:49:17

@LEDfan nee, die test is de key van de POST parameter en hoeft niet tussen quotes.

Toch lijkt het me beter om het wel te doen, nu hoop je maar dat JQuery het (test) als een string beschouwt en niet als een variabele
Koen Vlaswinkel op 23/12/2013 18:17:50

Omdat je de contentType verandert, zal PHP niet weten wat hij aanmoet met deze contentType. Als het goed is is de data wel zichtbaar op deze manier:

<?php
file_get_contents('php://input');
?>

Haal de contentType dus weg als je het in $_POST wil hebben.


Dit had ik ook al een keer geprobeerd, maar het blijkt te werken als ik het formulier met enter verzend (button nog niet) dus ik ga hier mee verder. Bedankt!

Jasper DS op 23/12/2013 16:35:58




Om even terug te komen op mijn afbeelding. Is het normaal dat er twee requesten gestuurd worden? 1x met de parameters en 1x zonder?

Reageren