当前位置: 首页 > 面试题库 >

Symfony2在AJAX调用上返回空JSON,而变量不为空

艾正浩
2023-03-14
问题内容

我正在尝试获得AJAX响应,因此我可以摆弄它以使表单更易于使用。当我使控制器(下面的代码)使用返回正常响应时var_dump(),我得到了对象的输出,因此我知道查询没有错(我使用ID
1进行查询调试)。但是,当我使用返回输出时json_encode(),我只会得到一个空的JSON文件。

视图中的HTML表单

<div id="content">
    <form id="myForm" action="{{path('snow_ajax')}}" method="POST" >
        Write your name here:
        <input type="text" name="name" id="name_id" value="" /><br />
        <input type="submit" value="Send" />
    </form>
</div>

同一视图中的脚本

<script type="text/javascript">
    $(document).ready(function() {

        $("#myForm").submit(function(){
            var url=$("#myForm").attr("action");

            $.post(url,{
                formName:"ajaxtest",
                other:"attributes"
            },function(data){

                if(data.responseCode==200 ){
                    alert("Got your json!");
                }
                else{
                    alert("something went wrong :(");
                }
            });
            return false;
        });
    });
</script>

控制器响应正常(工作)

public function ajaxAction()
{

    $location = $this->getDoctrine()->getRepository('SnowFrontBundle:Location')
        ->find(1);

    $output = var_dump($location);

    return $output;
}

具有AJAX响应的控制器(无效,返回空JSON)

public function ajaxAction()
{

    $location = $this->getDoctrine()->getRepository('SnowFrontBundle:Location')
        ->find(1);

    return new Response(json_encode($location), 200);
}

有人可以帮我吗?这真让我发疯!


问题答案:

我设法通过使用Doctrine2的实体管理器来修复它,以将结果存储在数组中,然后我将其编码为JSON。我不确定这是否是最干净的方法(根据我的IDE,getEntityManager()似乎已被弃用),但目前效果良好。

public function ajaxAction()
{
    $em = $this->getDoctrine()->getEntityManager();
    $query = $em->createQuery('SELECT l FROM Snow\FrontBundle\Entity\Location l WHERE l.id=:id');
    $query->setParameter('id', 1);
    $result = $query->getArrayResult();

    return new Response(json_encode($result), 200);
}


 类似资料:
  • 问题内容: java中有什么方法可以返回新数组而不先将其分配给变量?这是一个例子: 我想做这样的事情,但是不起作用: 问题答案: 即使不将其分配给变量,您仍然需要创建该数组。试试这个: 您的代码示例无效,因为编译器一方面仍然需要知道要通过静态初始化创建的类型。

  • 设置一个Java Postman调用,为变量赋值,但它显示为NULL。 邮递员请求

  • 问题内容: 例如我有一个功能: 我怎样才能返回AJAX后得到的? 问题答案: 因为请求是异步的,所以您无法返回ajax请求的结果(而同步ajax请求是一个 糟糕的 主意)。 最好的选择是将自己的回调传递给f1 然后,您将像这样致电:

  • 问题内容: 在回调函数之外使用全局变量的最佳方法是什么? 问题答案: 您提供的代码是完全有效的,并且实际上 可以 “保持”其价值。问题可能是异步运行的-仅 在 从服务器完全加载后才调用匿名函数。因此,现实世界中的执行顺序如下所示: 调用 (开始加载data.xml) 通话(目前仍为null) (data.xml中完成载入) 现在 匿名函数被调用时,其分配值给图标:。 如果你想要做一些事情的价值,

  • 问题内容: 我正在使用jquery调用ajax wcf方法,该方法将对象列表作为JSON字符串返回。在fiddler2中(在TextView中)检查时,JSON字符串如下所示: 当我在提琴手的JSON视图中检查结果时,它显示以下JSON: 因此,提琴手可以成功解析它,但是在客户端上,jQuery ajax错误回调函数显示以下错误: wcf方法的定义如下: 最后,调用的jQuery是: 提前致谢!

  • 问题内容: 随着框架的发展,我决定将其拆分为文件,而不是将其保留在主设计文件中。但是,这样做不会返回任何值。 数据不为空-如果我警告js文件中的值,它们在那里! 功能: 1 .js文件中的功能(在执行之前包含) 因此,这是执行部分: 而且测试是空的…我已经尝试过不同的编写方式,但是我想我误解了js的可能性吗? 问题答案: 您不能这样做:由于调用是异步的,因此get_data函数无法返回ajax调用