2015-05-28 24 views
0

我正在学习Symfony2框架,我想用一个非常简单的表单(一个文本字段)创建一个简单的应用程序,并将提交的数据(使用ajax)保存在一个非常简单的表中在数据库上。我的目标是在每次发送和保存新提交的数据时查看和更新​​整个数据库表(在同一页面使用ajax)。 这是我做了到现在为止,我不能够保存任何和500Symfony2:使用ajax调用保存数据库

DefaultController.php

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'); 
    } 
} 

jQuery的脚本

<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> 

编辑:这是网络控制台输出,有在JS 控制台而执行发生

例外,没有错误 'INSERT INTO项(ITEMNAME) VALUES(?)' 使用参数[空]: SQLSTATE [23000]:完整性约束 冲突:1048列“ITEMNAME”不能为空(500内部服务器 错误)

UPDATE:看来请求发送成功,但我不能访问 (或我不t完全知道该怎么做)到内容请求,因为 控制器收到这个Re任务奖励:

/app_dev.php/myapp/path/ HTTP/1.1 Accept: / Accept-Encoding: gzip, deflate Accept-Language: it-IT,it;q=0.8,en-US;q=0.5,en;q=0.3 Cache-Control: no-cache Connection: keep-alive Content-Length: 11 Content-Type: application/x-www-form-urlencoded; charset=UTF-8 Cookie: PHPSESSID=qhou8f9lias0i9fh3besdpbii7 Host: localhost:8000 Pragma: no-cache Referer: http://localhost:8000/app_dev.php/myapp/path/ User-Agent: Mozilla/5.0 (Windows NT 6.1; WOW64; rv:38.0) Gecko/20100101 Firefox/38.0 X-Php-Ob-Level: 1 X-Requested-With: XMLHttpRequest MyInputData

+0

检查控制台是否有错误。 –

+0

您的JavaScript控制台中的错误是什么? – Hakim

回答

0

我不能肯定地说,直到您发布确切的错误,但你saveAction($item)似乎希望你坚持/平成学说的对象,但它看起来像你没有通过这一点。

啊我的不好,看到你已经通过indexAction做到了这一点,我建议检查你是否张贴到正确的网址。在大多数浏览器中,您还可以看到XHR请求检查请求给出的确切错误。

编辑 感谢你的错误,你就节省了产品你所创建的空对象,一定要保存你所检索的数据项,与该行:

$filledinItem = $form->getData(); 
+1

显示同样的错误 – Andrea

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

+0

你能更具体吗?你是什​​么意思“//从ajax获取数据并准备好”? – Andrea

+0

@Andrea - 检查更新示例 – BentCoder

+0

我认为问题不在那里,因为$ data为null – Andrea