#php #ajax #symfony
#php #ajax #symfony
Вопрос:
Если кто-то воспроизводит видео на YouTube, я хочу отправить эту информацию на контроллер Symfony. Но почему-то контроллер ничего не получает.
Сообщение Ajax
// 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;
}
Маршрутизация
<route id="dbe_user_add_experience" pattern="/getexperience">
<default key="_controller">FOSUserBundle:Level:getExperience</default>
</route>
Контроллер
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);
}
Комментарии:
1. Одна вещь заключается в том, что вы используете
POST
/->request
, а затем проверяетеGET
/->query
часть запроса.2. хорошо, я это исправил. но я думаю, что каким-то образом он вообще не отправляет информацию. Я проверил с помощью firebug> Networkanalysis, и после щелчка не отображается метод POST.
3. Эй, он отправляет данные в формате Json?
Ответ №1:
Вместо
$data = $request->query->get('data');
Используйте
$data = $request->get('data');
Комментарии:
1. Хорошо, я исправил эту часть. Но почему-то я все еще не вижу метода POST в сетевом анализе firebug.
2. вы получаете какие-либо ошибки javascript?
alert
выполняется? правильно ли URL анализируется twig?3. Да, предупреждение выполнено. Как я могу проверить, правильно ли проанализирован URL-адрес? Я не уверен, выполняется ли ajax post вообще? Я получаю одно сообщение об ошибке в консоли: TypeError: $ не определено
4. Попробуйте использовать
getexperience
путь, жестко заданный вместоpath expression
или проверьте код javascript на стороне вашего браузера, проверьте источник javascript, правильно ли задан URL5. Если у вас значение $ не определено, это означает, что у вас не загружен jQuery, что означает, что ваш ajax-вызов не может быть выполнен
Ответ №2:
Вы используете неправильное свойство для получения POST-данных.
Для получения данных GET :
$request->query->get('data');
Для получения POST-данных :
$request->request->get('data');
Из http://api.symfony.com/2.0/Symfony/Component/HttpFoundation/Request.html
Ответ №3:
Я обнаружил ошибку: Ajax был в режиме noconflict. Это означает, что мне пришлось изменить $.ajax({
на jQuery.ajax({
.