2015-05-28 61 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