form - Cómo obtener la solicitud de publicación de Ajax por el controlador symfony2
symfony ajax response (3)
Envio mensaje de texto como este
marcado html
<textarea id="request" cols="20" rows="4"></textarea>
código 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);
}
});
código del controlador symfony2
$request = $this->container->get(''request'');
$text = $request->request->get(''data'');
pero $text
es nulo ...
He probado la solicitud de publicación normal (no Ajax) mediante el comprobador de solicitudes http de Firefox.
/app_dev.php/member/msgPost
El controlador funciona y $text
tiene un valor.
Así que creo que el código de PHP está bien, hay un problema en el lado Ajax, sin embargo
Se llama ''success: function'' como si hubiera tenido éxito.
¿Cómo se puede obtener el contenido de la estructura de datos javascript?
Lo estás haciendo mal al obtener el valor, debes usar:
$data = $request->request->get(''request'');
Porque la petición es el nombre de tu parámetro.
Primero, no necesita acceder al contenedor en su controlador, ya que ya implementa ContainerAware
Básicamente, su código debería tener este aspecto en su Controller.php
public function ajaxAction(Request $request)
{
$data = $request->request->get(''request'');
}
Además, asegúrese de que los datos que está enviando no sean nulos mediante el uso de console.log(data)
en el JS de su aplicación.
Y finalmente, la respuesta de su pregunta : no está usando la variable correcta, necesita acceder al valor de $(''#request'').val()
pero la almacenó en una variable de request
y usó un nombre de variable de data
en su controlador
Considere cambiar el nombre de la variable, porque es confuso.
Si está enviando los datos como JSON, no como el formato urlencoded, necesita acceder al cuerpo de la solicitud directamente:
$data = json_decode($request->getContent());