11 votes

la demande post ajax gère les données dans le contrôleur symfony2

Je ne comprends vraiment pas comment traiter les données postales d'une requête ajax. Voici mon javascript :

$.ajax({
     type: "POST",
     url: Routing.generate('save'),
     contentType: 'application/json; charset=UTF-8',
     data: {
          title: title,                
          description: description,
          questions: questions,              
         }
  });

La seule façon d'obtenir les données dans mon action de contrôleur est la suivante :

$content = $request->getContent()

$content est une chaîne de paramètres d'url. Pourquoi je n'obtiens pas les données normalement avec :

$request->get('title')

Quelle est la bonne façon de traiter les données postales avec jquery ajax methd ?

Merci beaucoup.

EDIT

J'ai donc découvert le problème suivant :

Dans mon projet actuel, la demande ressemble à ceci :

https://dl.dropboxusercontent.com/u/17861060/false.png

$.ajax({
            type: "POST",
            url: Routing.generate('poll_save'),                
            data: {
                title: title                    
            }
        })

Les données sont demandées via Charge utile de la demande mais je ne sais pas pourquoi.

Dans un projet propre, la demande ressemble à ceci :

https://dl.dropboxusercontent.com/u/17861060/right.png

$.ajax({
                type: "POST",
                url: '{{path('_demo')}}',                    
                data: {
                    title: 'title',                
                    description: 'description',
                    questions: 'questions',
                    pollid: 1                        
                }
            })

Il y a quelque chose qui ne va pas dans mon projet. Avez-vous une idée de la raison pour laquelle les données sont demandées via Charge utile de la demande ?

9voto

SirDerpington Points 10310

Utilisez-vous l'objet de requête dans votre contrôleur ?

<?php
namespace Acme\DemoBundle\Controller;

use Symfony\Component\HttpFoundation\Request;
//...other things to use

class MyController extends Controller
{
    public function handleRequestAction() {

        $request = $this->get('request');
        //request your data
        $title   = $request->get('title');
        //or in one line
        $title   = $this->get('request')->request->get('title');
    }
}
?>

C'est ma méthode habituelle lorsque je veux obtenir des données à partir d'un appel ajax. Pourriez-vous afficher ce que contient $content ?

Je ne vois aucun problème à publier les données comme vous l'avez fait. La construction d'un objet json pourrait être utile mais la façon dont vous le faites me semble correcte. Je l'ai fait aussi.

EDIT

Normalement, vous pourriez aussi accéder à toutes les données de la demande en procédant ainsi :

$all = $request->request->all();

Peut-être que vous pourriez alors var_dump() les variables pour voir si quelque chose s'y trouve.

1voto

anazimok Points 830

Vous pouvez construire votre objet JSON et passer l'objet JSON à votre contrôleur en utilisant JSON.stringify.

https://developer.mozilla.org/en-US/docs/JavaScript/Reference/Global_Objects/JSON/stringify

var obj = {
      title: title,                
      description: description,
      questions: questions              
};

$.ajax({
 type: "POST",
 url: Routing.generate('save'),
 contentType: 'application/json; charset=UTF-8',
 data: JSON.stringify(obj)
});

1voto

Teffi Points 157

Q serialize -population des variables

 $.ajax({
            url: $("#quiz").attr("action"),
            data: $("#quiz").serialize(),
            type: 'POST'
 });

o

$.ajax({
                url: $("#commentForm").attr("action"),
                data: {
                    comment: commentFormID.val()
                },
                type: 'POST'
});

Contrôleur - Plutôt comme ce que les commentaires précédents suggéraient.

$request = $this->get('request');
$usercomment=$request->request->get('parameterName');

0voto

Richard Pérez Points 1307

Pourquoi Json ? Si ce n'est pas le cas, c'est la façon dont je gère l'ajax et l'utilisation de FOSRoutingbundle que je vois que vous utilisez.

$(document).ready(function(){
    $('#myForm').submit( function(e){       

        e.preventDefault();
        var $form = $(this);
        var $formPHP = $form.serializeArray();
        var $url = Routing.generate( 'route_to_use');

        $.post( $url, $formPHP, function(data){
        .....
        });

    });    
});

Ensuite, dans le contrôleur, vous pouvez l'utiliser comme une demande normale.

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X