Empresas
Empleos
  • Sobre nosotros
  • Soluciones
    • Publicación de vacantes
      Publica tu vacante y recibe candidatos calificados en 48h.
    • Evaluación de candidatos
      500+ pruebas técnicas y psicológicas, más anti-fraude.
    • Headhunting
      Búsqueda ejecutiva a la medida de principio a fin.
    • Nómina + EOR
      Dispersión de nómina y EOR en más de 15 países de LATAM.
  • Precios
  • Empleos

0

325
Vistas
El método de respuesta Symfony v2.8 ($message) 'devuelve' más de lo esperado

Mi objetivo es devolver un mensaje a mi página web, donde se mostrará, pero en lugar de solo el mensaje, el valor devuelto contiene el mensaje y el código html para una página de error.

Aquí está el enrutamiento de acciones del paquete Symfony y la definición de la función:

 /** * @Route("/Utilities/getMessages/{callSign}/{loginDateTime}", * defaults={"callSign"="","loginDateTime"=""}) * * @return: json string. * */ public function getMessagesAction( $callSign, $loginDateTime ) { ... }

Estoy usando el siguiente código para devolver el resultado de un mensaje a una llamada ajax:

Código PHP del lado del servidor que es llamado por una llamada Ajax ...

 $message = 'Some message to be displayed.'; // Return to the page and display the message ... return new Response( $message ); // Inspecting $message shows only // 'Some message to be displayed.'

Código JavaScript del lado del cliente que llama al código anterior y recibe la respuesta:

 $.ajax( { // Send form data to the same page that the page came from type: 'POST', data: data, cache: false, async: true, contentType: false, enctype: 'multipart/form-data', processData: false } ) .done( function( data, textStatus, jqXHR ) { ... } // Inspecting data // shows more than // 'Some ... .fail( function( jqXHR, textStatus, errorThrown ) { ... }

Cuando los puntos de interrupción se establecen en la return new Response( $message ); y la primera línea ejecutable en la .done(...) , la ejecución del script PHP llega al punto de interrupción en la return new Response( $message ); declaración sin ningún error y puedo ver que el .done() del parámetro es "Algún mensaje para mostrar" Some message to be 'displayed.<!DOCTYPE html><html>...</html> !

Donde, si el código html se coloca en un archivo y se carga en el navegador, se ve algo así:

 Whoops, looks like something went wrong. 1/1 FatalErrorException in debug-eval(1) : eval()'d code line 1: Parse Error: syntax error, unexpected ')' in debug-eval(1) : eval()'d code line 1

Un mensaje de error obvio, pero mi código no usa ninguna declaración de eval() que pueda fallar y la ejecución llegó a la declaración de respuesta sin ningún error. ¿Es esto un error en el método/función de declaración de respuesta de Symfony? Si no es así, ¿cómo puedo averiguar lo que realmente está sucediendo para poder solucionarlo?

Seguimiento

Cambiar el código del lado del servidor para codificar una cadena json y luego decodificarlo en el lado del cliente no ayuda.

Código PHP del lado del servidor:

 // Return to the login page and display the message ... // $message'value => '{ "message":"' . $message . '"}'; $message = json_encode( [ 'message' => $message ] ); return new Response( $message );

Javascript del lado del cliente:

 ***unchaged***

En este caso, todavía estoy inspeccionando el parámetro de datos, pero ahora contiene el mensaje codificado en json Y el código de la página de error html. Alimentando esto a JSON.parse( data ); declaración para convertir los datos json en un objeto javaScript hace que javaScript se congele. Este no es un problema de json, el problema del código html adjunto al final de mi mensaje todavía está ocurriendo de cualquier manera.

Gracias

over 4 years ago · Santiago Trujillo
2 Respuestas
Responde la pregunta

0

No es un mensaje de error muy claro, pero parece que su error proviene de Xdebug y no de PHP.

Puedes ver un problema similar aquí .

Verificaría la pestaña "Relojes" en la pestaña de depuración de PHPStorm, y también desde PHPStorm, iría a Run > View Breakpoints puntos de interrupción y los eliminaría todos. Para estar seguro, también puede desactivar XDebug temporalmente (a través de la configuración de php.ini ) para confirmar que el problema desaparece.

over 4 years ago · Santiago Trujillo Denunciar

0

Intente devolver una new JsonResponse($json) en lugar de una new Response($json) .

Como en:

 use Symfony\Component\HttpFoundation\JsonResponse; // ... return new JsonResponse(['message' => $message]);

Si realmente (y quiero decir realmente) desea devolver una Respuesta por cualquier motivo, también puede hacer lo siguiente:

 $response = new Response(json_encode(['message' => $message]); $response->headers->set('Content-Type', 'application/json'); return $response;

Tenga en cuenta que nunca he probado la última alternativa, porque JsonResponse siempre me ha funcionado. Además, JsonResponse amplía la clase de respuesta, por lo que si necesita algo de la clase de respuesta, puede obtenerlo en JsonResponse.

El último ejemplo de respuesta se adjunta a esta respuesta debido a esta Documentación de Symfony .

over 4 years ago · Santiago Trujillo Denunciar
Responde la pregunta
Encuentra empleos remotos

¡Descubre la nueva forma de encontrar empleo!

Top de empleos
Top categorías de empleo
Empresas
Publicar vacante Precios Comercial
Legal
Términos y condiciones Política de privacidad
© 2026 PeakU Inc. All Rights Reserved.
Andres GPT
Recomiéndame algunas ofertas
Necesito ayuda