2013-04-27 25 views
11

Naprawdę nie rozumiem, jak obsługiwać dane post z żądania ajax. To jest mój javascript:ajax post request uchwyt danych w kontrolerze symfony2

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

Jedynym sposobem, aby uzyskać dane wewnątrz mojego działania kontrolera to:

$content = $request->getContent() 

$ treść jest ciągiem parametr url. Dlaczego nie mogę uzyskać dane normalnie z:

$request->get('title') 

Jaki jest prawidłowy sposób obsługiwać dane post z jquery ajax methd?

Dziękuję bardzo.

EDIT

Tak, okazało się następujący problem:

W moim obecnym projekcie wniosek wygląda następująco:

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

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

Dane są wymagane przez Żądaj ładowności, ale nie wiem czemu.

w czystym projektu prośba wygląda następująco:

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

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

Wszystko w moim projekcie jest nie tak. Czy masz pomysł, dlaczego dane są wymagane przez Request Payload?

Odpowiedz

1

Możesz skonstruować swój obiekt Json i przekazać obiekt JSON do kontrolera za pomocą 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

A to jest normalny przepływ pracy? Myślałem, że ajax mehtod poradzi sobie sam? –

+0

Tak, ponieważ $ .ajax nie szereguje danych do JSON. – anazimok

+0

Ale dlaczego nie mogę użyć normalnych metod pobierania? Dostaję tylko dane za pomocą $ request-> getContent() –

9

Używasz obiektu żądania w kontrolerze?

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

To jest mój normalny sposób, gdy chcę uzyskać dane z połączenia ajax. Czy możesz opublikować zawartość pliku $?

Nie widzę problemu z publikowaniem danych, tak jak Ty. Konstruowanie obiektu Json może być pomocne, ale sposób, w jaki to robisz, wydaje mi się w porządku. Zrobiłem to też.

EDIT

Normalnie można również uzyskać dostęp do wszystkich danych na żądanie w ten sposób:

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

Może można następnie var_dump() zmienne, aby zobaczyć, czy coś w nich jest.

+0

treść była ciągiem takim jak to: title = sadfsdf & description = & questions% 5B357147573695183% 5D% 5Bquestion% 5D = sdfas & questions% 5B357147573695183% 5D% 5Podpis% 5D = & pytania% 5B357147573695183% 5D % 5Boptional% 5D = false i pytania% 5B357147573695183% 5D% 5Bqtype% 5D = 1 i pytania% 5B357147573695183% 5D% 5Bsort% 5D = 1 i pytania% 5B357147573695183% 5D% 5Bid% 5D = 357147573695183 & pytania% 5B357147573695183% 5D% 5Bisze% 5D% 5B% 5D = fsdfasdf & pytania % 5B357147573695183% 5D% 5Binput% 5D% 5B% 5D = safsdf i pytania% 5B357147573695183% 5D% 5Błąd% 5D = prawda i pytania% 5B357147573695183% 5D% 5Badd% 5D = true & pollid = –

+1

$ request-> request-> all(); był również pusty. tylko getContent() dostarczy mi żadnych danych. kiedy dodaję dane do części adresu URL, wszystko jest w porządku. ale muszę wysłać dane za pośrednictwem parametru danych, ponieważ dane o wpisie mogą być bardzo duże. –

+0

Jak wygląda twoja metoda ajaxowa? –

1

Quiz - nazwa formularza serializacji -populate zmienne

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

lub

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

Controller - Raczej co poprzednie komentarze sugerowane.

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

nie działa dla mnie. nie rozumiem, dlaczego. –

0

Dlaczego Json? Chodzi mi o to, że jest wymagany wymóg typu json? jeśli nie, w ten sposób radzę sobie z ajaxem i korzystam z FOSRoutingbundle, z którego widzę, że korzystasz.

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

    });  
}); 

Następnie w sterowniku można użyć jako zwykły wniosek.