2013-04-27 23 views
11

in realtà non capisco come gestire i dati post dalla richiesta Ajax. Questo è il mio javascript:richiesta di posta ajax gestire i dati nel controller symfony2

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

L'unico modo per ottenere i dati dentro la mia azione di controllo è questo:

$content = $request->getContent() 

$ contenuto è una stringa di parametri URL. Perché non ricevo i dati normalmente con:

$request->get('title') 

Qual è il modo corretto di gestire i dati post con jquery ajax methd?

Grazie mille.

EDIT

Così, ho scoperto il seguente problema:

Nel mio progetto in corso la richiesta è simile al seguente:

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

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

è richiesto I dati via Richiesta carico utile ma non so perché.

In un progetto pulito la richiesta si presenta così:

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

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

Tutto ciò nel mio progetto sta andando male. Hai un'idea del motivo per cui i dati vengono richiesti tramite Richiesto carico utile?

risposta

1

È possibile costruire l'oggetto JSON e passare l'oggetto JSON al controller utilizzando 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) 
}); 
+0

E questo è il normale flusso di lavoro? Pensavo che il mehtod ajax lo gestisse da solo? –

+0

Sì, perché $ .ajax non serializza i dati su JSON. – anazimok

+0

Ma perché non posso usare i normali metodi dei requet? Ho ottenuto i dati tramite $ request-> getContent() –

9

Usi l'oggetto di richiesta nel controller?

<?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'); 
    } 
} 
?> 

Questo è il mio modo normale quando voglio ottenere i dati da una chiamata AJAX. Potresti pubblicare cosa contiene $ content?

Non vedo alcun problema con la pubblicazione dei dati come hai fatto tu. Costruire un oggetto JSON potrebbe essere d'aiuto, ma il modo in cui lo fai sembra a mio parere soddisfacente. L'ho fatto anch'io.

EDIT

Normalmente si potrebbe anche accedere a tutti i dati nella richiesta in questo modo:

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

forse si potrebbe poi var_dump() le variabili per vedere se qualcosa è in loro.

+0

il contenuto era una stringa come questa: title = sadfsdf & description = & questions% 5B357147573695183% 5D% 5Bestion% 5D = sdfas e domande% 5B357147573695183% 5D% 5Bdescription% 5D = & questions% 5B357147573695183% 5D % 5Boptional% 5D = falso e domande% 5B357147573695183% 5D% 5Bqtype% 5D = 1 & domande% 5B357147573695183% 5D% 5Bsort% 5D = 1 & domande% 5B357147573695183% 5D% 5Bid% 5D = 357.147.573.695.183 e domande% 5B357147573695183% 5D% 5Binput% 5D% 5B% 5D = fsdfasdf & domande % 5B357147573695183% 5D% 5Binput% 5D% 5B% 5D = safsdf e domande% 5B357147573695183% 5D% 5Bvalid% 5D = true & questions% 5B357147573695183% 5D% 5Badd% 5D = true & pollid = –

+1

$ request-> request-> all(); era anche vuoto. solo getContent() mi dà tutti i dati. quando aggiungo i dati alla parte url, tutto va bene. ma ho bisogno di inviare i dati tramite il parametro data perché i dati del post possono essere molto grandi. –

+0

come è il tuo metodo ajax? –

1

quiz - nome del modulo serializzare -populate le variabili

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

o

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

controller - più simile a quello commenti precedenti hanno suggerito.

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

non funziona per me. non capisco perché –

0

Perché Json? Intendevo è un requisito per il tipo di contenuto JSON? se no, questo è il modo in cui gestisco ajax e utilizzo FOSRoutingbundle che posso vedere che stai usando.

$(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){ 
     ..... 
     }); 

    });  
}); 

Quindi nel controller è possibile utilizzare come una richiesta normale.

Problemi correlati