If someone plays a YouTube video I want to send this information to a Symfony Controller. But somehow the controller receives nothing.
The Ajax Post
// Check if video is playing (works)
var myPlayerState;
function onPlayerStateChange(event) {
if (event.data == YT.PlayerState.PLAYING) {
alert('playing');
$.ajax({
url: "{{ path('dbe_user_add_experience') }}",
type: "POST",
data: { "data" : 'test' },
success: function(data) {
alert (data);
},
error: function(XMLHttpRequest, textStatus, errorThrown)
{
alert('Error: ' + errorThrown);
}
});
}
myPlayerState = event.data;
}
The Routing
<route id="dbe_user_add_experience" pattern="/getexperience">
<default key="_controller">FOSUserBundle:Level:getExperience</default>
</route>
The Controller
public function getExperienceAction(){
$request = $this->container->get('request');
$data = $request->request->get('data');
var_dump($data);
die;
$url = $this->container->get('router')->generate('fos_user_profile_show');
$response = new RedirectResponse($url);
return $response;
//$this->addExperience(5);
}
Instead of
$data = $request->query->get('data');
Use
$data = $request->get('data');
You are using the wrong property to get POST data.
To get GET data :
$request->query->get('data');
To get POST data :
$request->request->get('data');
From http://api.symfony.com/2.0/Symfony/Component/HttpFoundation/Request.html
I found the error: Ajax was in the noconflict modus. Meaning I had to change $.ajax({
to jQuery.ajax({
.