symfony2ajaxjquery

symfony2ajaxjquery,jquery,ajax,symfony,Jquery,Ajax,Symfony,我在试图让Symfony和ajax更好地配合时遇到了一些问题。我是Symfony和ajax的新手,所以对我放松点。我确信我的代码是一场噩梦,但我正在学习:) 我能够创建一个表单并在没有Ajax的情况下将数据发布到Symfony(通过URL发布),但是,当我尝试通过Ajax(完全相同的表单)进行发布时,我得到了400的json响应。我知道这与Symfony无法理解进入其中的post数据有关。在我的控制器操作中,它处理得很好,直到到达“if($form->isValid())”部分,这是Symfon

我在试图让Symfony和ajax更好地配合时遇到了一些问题。我是Symfony和ajax的新手,所以对我放松点。我确信我的代码是一场噩梦,但我正在学习:)

我能够创建一个表单并在没有Ajax的情况下将数据发布到Symfony(通过URL发布),但是,当我尝试通过Ajax(完全相同的表单)进行发布时,我得到了400的json响应。我知道这与Symfony无法理解进入其中的post数据有关。在我的控制器操作中,它处理得很好,直到到达“if($form->isValid())”部分,这是Symfony不喜欢我的表单的地方

以下是我的jQuery ajax,用于通过表单发送post数据:

 $(document).ready(function() {
        $("#myForm").submit(function(){

            // My form
            var $form = $(this).closest("#myForm");

            // If valid
            if($form){

                // The url where the form is being posted via ajax
                var url = $("#myForm").attr("action");

                // Post the data
                $.post(url,{
                    type: "POST",
                    data: $form.serialize(), // serializing the data being sent 
                    cache: false
                },function(data){

                    // If valid
                    if(data.responseCode == 200 ){
                        alert(data.responseCode);
                    }
                    else if(data.responseCode==400){
                        alert(data.responseCode);
                    }else{
                        alert("bad response all together...");
                    }
                }); 
            }
            return false;
        });
    });
以下是通过Symfony form builder创建的我的表单:

 <form novalidate class="form-horizontal" id="myForm" action="/symfonydev/web/app_dev.php/warehouse/ajax/insert/" method="POST" >
 <input type="text" id="warehouse_name" name="warehouse[name]" required="required" placeholder="Location Name" class="input-block-level" value="" />
 <input type="text" id="warehouse_address" name="warehouse[address]" required="required" placeholder="Address" class="input-block-level" value="" />
 <input type="text" id="warehouse_city" name="warehouse[city]" required="required" placeholder="City" class="input-block-level" value="" />
 <input type="text" id="warehouse_state" name="warehouse[state]" required="required" placeholder="State" class="input-block-level" value="" />
 <input type="text" id="warehouse_zip" name="warehouse[zip]" required="required" placeholder="Zip" class="input-block-level" value="" />
 <input type="text" id="warehouse_email" name="warehouse[email]" required="required" placeholder="Email Address" class="input-block-level" value="" />
 <input type="text" id="warehouse_phone" name="warehouse[phone]" required="required" placeholder="Phone" class="input-block-level" value="" />
 <input type="text" id="warehouse_fax" name="warehouse[fax]" required="required" placeholder="fax" class="input-block-level" value="" />
 <input type="hidden" id="warehouse__token" name="warehouse[_token]" value="5352017c711a3a9d87ca9158334b32ab9f1dd3af" />
 <input type="submit" value="Send" />
 </form>
这是我的控制器操作:

 public function ajaxinsertAction(Request $request)
{

    // Get user's account
    $account = $this->getUser()->getAccount();

    // Warehouse form
    $warehouse = new Warehouse();
    $form = $this->createForm(new WarehouseType(), $warehouse);

    if ($request->isMethod('POST')) {

        // Get the Account of this user and set it on the warehouse being created.
        $account = $this->getUser()->getAccount();
        $warehouse->setAccount($account);
        $form->bind($request);

        if ($form->isValid()) {

            $em = $this->getDoctrine()->getManager();
            $em->persist($warehouse);
            $em->flush();

            $return = array("responseCode"=>200, "response"=>"Valid");
            $return = json_encode($return); // json encode the array
            return new Response($return,200,array('Content-Type'=>'application/json'));
            die;

        }else{

            $return = array("responseCode"=>400, "response"=>"Invalid");
            $return = json_encode($return); // json encode the array
            return new Response($return,400,array('Content-Type'=>'application/json'));
            die;
        }
    }
}
谢谢你的帮助

有没有关于Symfony和Ajax的好教程?我想了解更多关于这个框架的信息,除了Symfony上的文档(这些文档非常好,尽管它们几乎没有关于ajax的文档)之外,这些信息似乎非常稀少


干杯

您是否尝试过手动传递值

 ...
               $.post(url,{
                    type: "POST",
                    "warehouse[city]": $('#warehouse_city').val(),
                    "warehouse[state]" : $('#warehouse_state').val(),
                    ...
                    cache: false
                }
                ....

您是否尝试过手动传递值

 ...
               $.post(url,{
                    type: "POST",
                    "warehouse[city]": $('#warehouse_city').val(),
                    "warehouse[state]" : $('#warehouse_state').val(),
                    ...
                    cache: false
                }
                ....

对于那个些在漫长的一天之后寻找类似问题答案的人,我感到心烦意乱

我的处境非常相似。问题是您提交的是空数据。。。你提交表格。。。然后你拉到DOM

var$form=$(this).closest(#myForm”)

应该是

var form=$(this); 

$.post(url, form.serialize(), function(data) {

});  

对于那个些在漫长的一天之后寻找类似问题答案的人,我感到心烦意乱

我的处境非常相似。问题是您提交的是空数据。。。你提交表格。。。然后你拉到DOM

var$form=$(this).closest(#myForm”)

应该是

var form=$(this); 

$.post(url, form.serialize(), function(data) {

});  

正如Trki所注意到的,你的建议是有效的,但实际上是解决原始问题的一种方法。你的建议是有效的,但实际上是解决原始问题的一种方法。