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?
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.
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());
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.