Symfony v2.8 Response( $message ) 方法“返回”超过预期

如何解决Symfony v2.8 Response( $message ) 方法“返回”超过预期

我的目标是向我的网页返回一条消息,在那里显示它,但不仅仅是消息,返回的值包含错误页面的消息和 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,errorThrown ) { ... }

当断点设置在 return new Response( $message );.done(...) 函数的第一个可执行行时,PHP 脚本执行到达 return new Response( $message ); 语句处的断点,没有任何错误,我可以看到参数的值是“要显示的一些消息。”,正如预期的那样,但是当在 .done() 函数的第一行暂停时,数据参数的值是: Some message to be 'displayed.<!DOCTYPE html><html>...</html>

如果将 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

一条明显的错误消息,但我的代码没有使用任何可能失败的 eval() 语句,并且执行到 Response 语句没有任何错误。这是 Symfony Response 语句方法/函数中的错误吗?如果没有,我怎样才能找出真正发生的事情,以便我可以解决它?

跟进

更改服务器端代码以对 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***

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

谢谢

解决方法

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

您可以看到类似的问题 here

我会在 PHPStorm 调试选项卡中检查您的“手表”选项卡,并且从 PHPStorm 转到 Run > View Breakpoints 并删除所有这些选项卡。为确保您也可以暂时停用 XDebug(通过 php.ini 设置)以确认问题消失。

,

尝试返回 new JsonResponse($json) 而不是 new Response($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 Documentation,最后一个响应示例附加到此答案中。

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。

相关推荐


依赖报错 idea导入项目后依赖报错,解决方案:https://blog.csdn.net/weixin_42420249/article/details/81191861 依赖版本报错:更换其他版本 无法下载依赖可参考:https://blog.csdn.net/weixin_42628809/a
错误1:代码生成器依赖和mybatis依赖冲突 启动项目时报错如下 2021-12-03 13:33:33.927 ERROR 7228 [ main] o.s.b.d.LoggingFailureAnalysisReporter : *************************** APPL
错误1:gradle项目控制台输出为乱码 # 解决方案:https://blog.csdn.net/weixin_43501566/article/details/112482302 # 在gradle-wrapper.properties 添加以下内容 org.gradle.jvmargs=-Df
错误还原:在查询的过程中,传入的workType为0时,该条件不起作用 &lt;select id=&quot;xxx&quot;&gt; SELECT di.id, di.name, di.work_type, di.updated... &lt;where&gt; &lt;if test=&qu
报错如下,gcc版本太低 ^ server.c:5346:31: 错误:‘struct redisServer’没有名为‘server_cpulist’的成员 redisSetCpuAffinity(server.server_cpulist); ^ server.c: 在函数‘hasActiveC
解决方案1 1、改项目中.idea/workspace.xml配置文件,增加dynamic.classpath参数 2、搜索PropertiesComponent,添加如下 &lt;property name=&quot;dynamic.classpath&quot; value=&quot;tru
删除根组件app.vue中的默认代码后报错:Module Error (from ./node_modules/eslint-loader/index.js): 解决方案:关闭ESlint代码检测,在项目根目录创建vue.config.js,在文件中添加 module.exports = { lin
查看spark默认的python版本 [root@master day27]# pyspark /home/software/spark-2.3.4-bin-hadoop2.7/conf/spark-env.sh: line 2: /usr/local/hadoop/bin/hadoop: No s
使用本地python环境可以成功执行 import pandas as pd import matplotlib.pyplot as plt # 设置字体 plt.rcParams[&#39;font.sans-serif&#39;] = [&#39;SimHei&#39;] # 能正确显示负号 p
错误1:Request method ‘DELETE‘ not supported 错误还原:controller层有一个接口,访问该接口时报错:Request method ‘DELETE‘ not supported 错误原因:没有接收到前端传入的参数,修改为如下 参考 错误2:cannot r
错误1:启动docker镜像时报错:Error response from daemon: driver failed programming external connectivity on endpoint quirky_allen 解决方法:重启docker -&gt; systemctl r
错误1:private field ‘xxx‘ is never assigned 按Altʾnter快捷键,选择第2项 参考:https://blog.csdn.net/shi_hong_fei_hei/article/details/88814070 错误2:启动时报错,不能找到主启动类 #
报错如下,通过源不能下载,最后警告pip需升级版本 Requirement already satisfied: pip in c:\users\ychen\appdata\local\programs\python\python310\lib\site-packages (22.0.4) Coll
错误1:maven打包报错 错误还原:使用maven打包项目时报错如下 [ERROR] Failed to execute goal org.apache.maven.plugins:maven-resources-plugin:3.2.0:resources (default-resources)
错误1:服务调用时报错 服务消费者模块assess通过openFeign调用服务提供者模块hires 如下为服务提供者模块hires的控制层接口 @RestController @RequestMapping(&quot;/hires&quot;) public class FeignControl
错误1:运行项目后报如下错误 解决方案 报错2:Failed to execute goal org.apache.maven.plugins:maven-compiler-plugin:3.8.1:compile (default-compile) on project sb 解决方案:在pom.
参考 错误原因 过滤器或拦截器在生效时,redisTemplate还没有注入 解决方案:在注入容器时就生效 @Component //项目运行时就注入Spring容器 public class RedisBean { @Resource private RedisTemplate&lt;String
使用vite构建项目报错 C:\Users\ychen\work&gt;npm init @vitejs/app @vitejs/create-app is deprecated, use npm init vite instead C:\Users\ychen\AppData\Local\npm-