当前位置: 首页 > 知识库问答 >
问题:

Symfony v2.8响应($message)方法“返回”多于预期

竺展
2023-03-14

我的目标是将一条消息返回到我的网页上,并在那里显示出来,但是返回的值不仅仅是消息,还包含了错误页面的消息和html代码!

下面是 Symfony 捆绑包操作路由和函数定义:

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

public function getMessagesAction( $callSign, $loginDateTime ) { ... }

我正在使用以下代码将消息结果返回给ajax调用:

由Ajax调用的服务器端PHP代码...

$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.'

调用上述代码并接收响应的客户端JavaScript代码:

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

当断点设置在< code >时返回新的响应($ message);和< code >中的第一个可执行行。完成(...)函数,PHP脚本执行到< code > return new Response($ message)处的断点;语句没有任何错误,我可以看到该参数的值是“要显示的一些消息”,但在< code >处暂停时。done()函数的第一行,数据参数的值是:< code >要显示的一些消息。

其中,如果将html代码放在文件中并加载到浏览器中,它看起来有点像这样:

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

一个明显的错误消息,但我的代码没有使用任何可能失败的val()语句,并且执行没有任何错误就到达了响应语句。这是Symfony响应语句方法/函数中的错误吗?如果不是,我如何找出真正发生的事情,以便修复它?

后续行动

更改服务器端代码以对json字符串进行编码,然后在客户端对其进行解码并没有帮助。

服务器端PHP代码:

// Return to the login page and display the message ...

// $message'value => '{ "message":"' . $message . '"}';

$message = json_encode( [ 'message' => $message ] ); 
return new Response( $message );

客户端Javascript:

    ***unchaged***

在这种情况下,我仍在检查data参数,但它现在包含json编码消息和html错误页面代码。将其馈送到JSON.parse(data);将json数据转换为javaScript对象的语句会导致javaScript冻结。这不是json问题,附加到消息末尾的html代码的问题仍然以任何一种方式发生。

谢谢你

共有2个答案

微生曾琪
2023-03-14

尝试返回new JsonACK($json)而不是new ACK($json)

就像:

use Symfony\Component\HttpFoundation\JsonResponse;

// ...
return new JsonResponse(['message' => $message]);

如果你真的(我的意思是真的)出于任何原因想要返回响应,你也可以这样做:

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

return $response;

请记住,我从来没有尝试过最后一种选择,因为JsonResponse一直对我有效。此外,JsonResponse扩展了Response类,因此如果您需要Response类中的任何内容,可以在JsonResponse中获得。

由于这个Symfony文档,最后一个响应示例附在这个答案之后。

佴淮晨
2023-03-14

这不是一个非常明确的错误消息,但听起来你的错误来自Xdebug,而不是PHP。

你可以在这里看到类似的问题。

我将在PHPStorm调试选项卡中检查您的“手表”选项卡,并从phpstor姆转到<code>运行

 类似资料:
  • 我想在spring boot中,当响应对象对于每个响应自动为null时返回404。 我需要建议。 我不想检查控制器中的对象是否为null。

  • 问题内容: 在我的科目表中,我按学期和月份列出了所有学生的课程,每个月的分数 这就是我尝试过的 我从查询中获得的当前输出是每个查询的多个响应,因为我可以将其更改为,但不会获取其他数据 我的问题是我如何将它们合并为一个响应,并在预期的输出中返回以下数据(我在每个字段中添加了一些说明以对其进行解释) 预期产量 问题答案: 问题是,您想获取主题,而不是学生。因此,我反转了FROM和LEFT JOIN。因

  • 我正在使用dropwizard和jersey2 rest客户端,我得到 然而,当我打开日志记录时,我看到 我怎样才能反序列化这个响应,而不是只得到400? 我的代码看起来像 亚洲账户基本上是空的 我添加了apiVerson,时间戳和错误到亚洲帐户,但它仍然不工作。任何帮助都很感激。

  • 问题内容: 显然,该方法的返回类型为void,因此,它不返回任何内容。从这个意义上讲,我使用“返回”一词来表示将响应发送回请求它的客户端。 我正在尝试实现一个长轮询的Servlet。最好在我有想要发回的东西之前不发送响应,这将是有益的。因此,在doGet方法中,将连接的用户的ID和AsyncContext添加到映射中: 然后,当我有东西要发回时,我可以检索适当的上下文并写入其响应输出流: 但是,客

  • 我试图编写一个方法,它接受@PathVariable参数,并将用户重定向到一个jsp文件。 @pathvariable(value=“customerId”)字符串customerId @pathvariable(name=“customerId”)字符串customerId @pathvariable(“customerId”)字符串customerId 谢谢你的帮助。

  • 本文向大家介绍symfony2 返回404响应,包括了symfony2 返回404响应的使用技巧和注意事项,需要的朋友参考一下 示例 当在服务器上找不到资源时,将返回404响应。在Symfony中,可以通过引发NotFoundHttpException异常来创建此状态。为了避免use在控制器内部添加多余的语句,请使用类createNotFoundException()提供的Controller