【问题标题】:Returning form view in Symfony2 using Ajax/Jquery使用 Ajax/Jquery 在 Symfony2 中返回表单视图
【发布时间】:2015-09-25 19:22:49
【问题描述】:

当前从下拉菜单中发布数据。我正在尝试基本上返回的表单,然后将其插入页面。

选择下拉菜单

<form method="POST" style="display: inline;">
    <select name="event_added" class="selectpicker">
        {% for subscription in form.peerEventSubscriptions %}
            <option value='{{typeDefEvent[loop.index0]}}'>{{ form_label(subscription.eventTypeHumanized) }}</option>
        {% endfor %}
    </select>
    <input type="submit" class="btn btn-default" id = "addEventButton" data-rel="tooltip" title="AddEvent" value="Add Event" style="line-height: 1.5" />
</form>

Ajax/Jquery

var addEvent = $("#addEventButton");

addEvent.click(function(){

    $.ajax({
            method: "POST",
            url: "{{ path('_add_new_sub_event') }}",
            contentType: 'application/json; charset=utf-8',
            data: { postVars: "EVENT_CLASS_JITTER EVENT_JITTER" }
        })
        .done(function( msg ) {
            console.log( "Data Saved: " + msg );
            window.stop();
        });

});

控制器

返回此数据,表单有效。

return array(
    'form' => $form->createView(),
);

收到 500 内部服务器错误。我只是想基本取这个表单,然后渲染到当前页面,不刷新。

【问题讨论】:

  • 从浏览器直接访问{{ path('_add_new_sub_event') }}生成的url会发生什么? (我敢打赌这也是 500 错误)
  • 很公平,但您提供的信息不足以让任何人在这里为您提供帮助。一个 500 错误意味着 Symfony 在某个地方抛出了一个异常,根据您提供的 url 没有捕获到该异常。要对其进行调试,您需要获取有关所引发异常的更多信息。
  • 好的,现在我们收到 400 bad request 错误。
  • 使用Postman 模拟请求(包括POST,或任何HTTP 方法类型)。

标签: javascript php jquery ajax symfony


【解决方案1】:

我邀请您使用 FOSJsRoutingBundle,

看看我的 jQuery Ajax 调用示例:

$('#addNewVariant').on('click', function(event){
                var hidden_input = $('#hidden_input').val();
                hidden_input++;
                $.ajax({
                    type: "get",
                    dataType: 'json',
                    url: Routing.generate('admin_products_addNewVariant', {'number' : hidden_input }),
                    beforeSend: function(){
                        $('.loadingGif').show();
                        $('#loadingModal').modal('show');
                    },
                    success: function( returnedData ) {
                        $('#hidden_input').attr( 'value', hidden_input );
                        $('#ajaxVariantAdded').append('<li class="dd-item" data-id="'+returnedData.id+'"><div class="dd-handle"><a data-id="'+returnedData.id+'"><i class="fa fa-hand-o-right"></i> {{"tab.variant"|trans}} '+returnedData.name+'</a><a data-id="'+returnedData.id+'" data-toggle="modal" class="pull-right" href="#modal'+returnedData.id+'"><i class="glyphicon glyphicon-minus-sign"></i></a></div></li>');
                        $( '.ajax' ).append( returnedData.form );
                        $('.variant').hide();
                        $('.variantItem'+returnedData.id).show();
                        $('.loadingGif').hide();
                        $('#loadingModal').modal('hide');
                    },
                    error: function( returnedData){
                        $('.loadingGif').hide();
                        $('#loadingModal').modal('hide');
                    }
                });
            });

这是我的路线:

admin_products_addNewVariant:
    pattern:  /addVariation/{number}
    defaults: { _controller: "ProductsBundle:BackEnd/Products:addNewVariant" }
    options:
        expose: true

最后这是我的功能:

public function addNewVariantAction($number){
        $entity = new Variant();
        $form = $this->createForm(new VariantType($number), $entity)->createView();
        $response = new JsonResponse(array(
                'form' => $this->renderView('ProductsBundle:Administration:Products/NewFormVariant/new.html.twig',array(
                        'form'          => $form,
                        'number'        => $number,
                    )
                ),
                'name'      => $number+1,
                'id'        => $number,
            ));

        return $response;
    }

希望我的回答能有所帮助。

【讨论】:

    猜你喜欢
    • 2015-03-27
    • 1970-01-01
    • 2015-12-05
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-07-21
    • 1970-01-01
    相关资源
    最近更新 更多