web-dev-qa-db-fra.com

Comment obtenir la demande de publication Ajax par le contrôleur symfony2

J'envoie un SMS comme celui-ci

balisage html

<textarea id="request" cols="20" rows="4"></textarea>

code javascript

var data = {request : $('#request').val()};

$.ajax({
    type: "POST",
    url: "{{ path('acme_member_msgPost') }}",
    data: data,
    success: function (data, dataType) {
        alert(data);
    },
    error: function (XMLHttpRequest, textStatus, errorThrown) {
        alert('Error : ' + errorThrown);
    }
});

code du contrôleur symfony2

$request = $this->container->get('request');
$text = $request->request->get('data');

mais $text est nul ...

J'ai essayé la demande de publication normale (pas Ajax) par le testeur de demande http Firefox.

/app_dev.php/member/msgPost

Le contrôleur fonctionne et $text a une valeur.

Je pense donc que le code php est OK, il y a le problème côté Ajax, cependant

'success: function' est appelé comme s'il avait réussi.

Comment obtenir le contenu de la structure de données javascript?

21
whitebear

Tout d'abord, vous n'avez pas besoin d'accéder au conteneur dans votre contrôleur car il implémente déjà ContainerAware

Donc, fondamentalement, votre code devrait ressembler à ceci dans votre Controller.php

public function ajaxAction(Request $request)
{
    $data = $request->request->get('request');
}

Assurez-vous également que les données que vous envoyez ne sont pas nulles en utilisant console.log(data) dans le JS de votre application.

Et enfin la réponse à votre question: vous n'utilisez pas la bonne variable, vous devez accéder à la valeur de $('#request').val() mais vous l'avez stockée dans une variable request et vous avez utilisé un nom de variable data dans votre contrôleur.

Pensez à changer le nom de la variable, car c'est déroutant.

27
sf_tristanb

Si vous envoyez les données au format JSON - et non au format urlencodé - vous devez accéder directement au corps de la demande:

$data = json_decode($request->getContent());
22
Elnur Abdurrakhimov

Vous vous trompez lors de l'obtention de la valeur, vous devez utiliser:

$data = $request->request->get('request');

'cause request est le nom de votre paramètre.

3
mangel.snc