Symfony2:使用ajax调用保存db

时间:2015-05-28 13:12:07

标签: jquery ajax symfony

我正在研究Symfony2框架,我想用一个非常简单的形式(一个文本字段)创建一个简单的应用程序,并将提交的数据(使用ajax)保存在数据库上一个非常简单的表中。我的目标是每次发送和保存新的提交数据时查看和更新​​(在同一页面中使用ajax)整个数据库表。 这是我到目前为止所做的,我无法保存任何东西和500

  

DefaultController.php

...style.display='inline'
  

JQuery脚本

class DefaultController extends Controller
{
    public function indexAction(Request $request)
    {
        $item = New Item();
        $form = $this->createForm(new ItemType(), $item,  array('action'=>$this->generateUrl('vendor_name_simple_homepage'),'method'=>'POST'));
        $form->add('Submit','submit',array('label'=>'Add'));
        $form->handleRequest($request);
        if ($request->isXmlHttpRequest()) {
            $this->saveAction($item);
        }
        return $this->render('VendorNameSimpleBundle:Default:lista.html.twig',array('form' => $form->createView()));
    }
    public function saveAction($item){
        $em = $this->getDoctrine()->getManager();
        $em->persist($item);
        $em->flush();
        return new Response('success');
    }
}

  

编辑:这是网络控制台输出,JS中没有错误   控制台

     

执行' INSERT INTO项目(itemName)时发生异常   价值观(?)' with params [null]:SQLSTATE [23000]:完整性约束   违规行为:1048栏' itemName'不能为null(500内部服务器   误差)

     

更新:似乎请求已成功发送但我无法访问   (或者我不知道该怎么做)因为内容请求   控制器收到此请求:

<script> $(document).ready(function() { $('form').submit(function(event) { // prevents the browser from "following" the link event.preventDefault(); var $url = $("form").attr("action");// + '.json'; var $value = $('#item_itemName').val(); $.ajax({ type: "POST", url: $url, data: $value, success: function(data) { $('ul').html(data); }/*, dataType: 'json'*/ }); }); }); </script>

2 个答案:

答案 0 :(得分:1)

我认为你过度复杂了。我建议你用一种方法做所有事情,例如:

注意:这为您提供了一般的想法!

public function saveAction(Request $request)
{
    if ($request->isXMLHttpRequest()) {
        $data = $request->request->get('request');
        $itemName = // Extract it from $data variable

        $item = NewItem();
        $item->setItemName($itemName);

        $em = $this->getDoctrine()->getManager();
        $em->persist($item);
        $em->flush();
    } else {
        // Do something else
    }
}

您还应该处理此类Catching ORM, DBAL and PDO exceptions in symfony之类的异常。还要看Symfony2cheatsheet因为你正在学习的好东西。

答案 1 :(得分:0)

在你发布确切的错误之前我不能肯定地说,但你的saveAction($item)似乎期望一个你坚持/冲入Doctrine的对象,但看起来你似乎没有传递它。< / p>

啊,我的坏,看到你通过indexAction完成了,我建议检查你是否发布到正确的URL。在大多数浏览器中,您还可以看到XHR请求,以检查请求给您的确切错误。

修改 感谢您的错误,您要保存的项目是您创建的空白对象,请确保使用此行保存包含您检索到的数据的项目:

$filledinItem = $form->getData();