2013-04-27 7 views
11

Ich verstehe wirklich nicht, wie mit Post-Daten von Ajax Anfrage zu behandeln. Das ist mein javascript:Ajax Post Anfrage Handle Daten in Symfony2 Controller

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

Der einzige Weg, um die Daten in meiner Controller-Aktion zu bekommen, ist dies:

$content = $request->getContent() 

$ content ist ein URL-Parameter-String. warum ich nicht bekommen die Daten normalerweise mit:

$request->get('title') 

Was ist der richtige Weg, um die Post-Daten mit jquery ajax methd zu behandeln?

Vielen Dank.

EDIT

So fand ich die folgende Frage aus:

In meinem aktuellen Projekt die Anforderung wie folgt aussieht:

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

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

Die Daten angefordert werden über Anfrage Payload, aber ich weiß es nicht Warum.

In einem sauberen Projekt sieht die Anfrage wie folgt aus:

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

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

Alles, was in meinem Projekt nicht in Ordnung ist. Haben Sie eine Idee, warum die Daten über Anfrage Payload angefordert werden?

Antwort

1

Sie können Ihr Json-Objekt konstruieren und das JSON-Objekt mithilfe von JSON.stringify an Ihren Controller übergeben.

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

Und das ist der normale Workflow? Ich dachte, der Ajax-Mehtod würde das alleine bewältigen? –

+0

Ja, weil $ .ajax die Daten nicht zu JSON serialisiert. – anazimok

+0

Aber warum kann ich nicht die normalen requets Methoden benutzen? Ich bekomme nur die Daten über $ request-> getContent() –

9

Haben Sie das Anfrage-Objekt in Ihrem Controller verwenden?

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

Dies ist meine normale Art, wenn ich Daten von einem Ajax-Anruf erhalten möchte. Könnten Sie den Inhalt von $ content posten?

Ich sehe kein Problem mit dem Posten der Daten wie Sie getan haben. Das Erstellen eines JSON-Objekts könnte hilfreich sein, aber die Art und Weise, wie Sie es tun, scheint mir gut zu sein. Ich habe das auch getan.

EDIT

Normalerweise können Sie alle Daten in der Anforderung Zugriff auch dies tun:

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

Vielleicht könnten Sie dann var_dump() die Variablen, um zu sehen, ob etwas in ihnen ist.

+0

Inhalt war ein String wie folgt: title = sadfsdf & description = & questions% 5D% 5Bquestion% 5D = sdfas & fragen% 5B357147573695183% 5D% 5Bdescription% 5D = & fragen% 5B357147573695183% 5D % 5Boptional% 5D = falsch & Fragen% 5B357147573695183% 5D% 5BqTyp% 5D = 1 & Fragen% 5B357147573695183% 5D% 5Bsort% 5D = 1 & Fragen% 5B357147573695183% 5D% 5Bid% 5D = 357147573695183 & Fragen% 5B357147573695183% 5D% 5Einführung% 5D% 5B% 5D = fsdfasdf & Fragen % 5B357147573695183% 5D% 5Binput% 5D% 5B% 5D = safsdf & Fragen% 5B357147573695183% 5D% 5Bvalid% 5D = wahr & Fragen% 5B357147573695183% 5D% 5Badd% 5D = wahr & pollid = –

+1

$ Anfrage-> Anfrage-> alle(); war auch leer. nur getContent() gibt mir irgendwelche Daten. Wenn ich die Daten zum URL-Teil hinzufüge, ist alles in Ordnung. aber ich muss die Daten über den Datenparameter senden, da die Post-Daten sehr groß sein können. –

+0

Wie sieht Ihre Ajax-Methode aus? –

1

Quiz - Form Name serialize -populate die Variablen

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

oder

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

-Controller - Mehr wie, welche vorherigen Kommentare vorgeschlagen.

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

funktioniert nicht für mich. verstehe nicht warum. –

0

Warum Json? Ich meine ist eine Anforderung an den Inhaltstyp json? Wenn nicht, ist dies die Art, wie ich Ajax handhabe und FOSRoutingbundle verwende, von dem ich sehe, dass Sie es verwenden.

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

    });  
}); 

Dann in der Steuerung können Sie als eine normale Anfrage verwenden.