javascript - Return to Ajax - Error - Symfony2 -
for on week can not solve problem ajax . have form customer chooses product buy , amount going buy , , extent ( 1kg, 5kg, etc ) . works properly, when choose product, other 2 fields corresponding quantities , units auto . when sending form, tells me following error:
the controller must return response (null given). did forget add return statement somewhere in controller?
i'll put code , problem should in driver. reading not difficult , commenting on each step.
1°: first, sending form view. (obviously , first passes through routing, not go if)
tablascontroller.php
public function pedidoaction() { $em = $this->getdoctrine()->getmanager(); $prodped= new prodpedido();//creo la entidad de los productos $form = $this->createform(new prodpedidotype(), $prodped); $nombres = $em->getrepository('proyectoadminbundle:catalogo')->findbyarticulo(); return $this->render('atajobundle:general:pedido.html.twig', array('form' => $form->createview(), 'nombres' => $nombres)); }
2°: reduced little code not long . here , present form, , make corresponding javascript handles dynamically add fields , , mentioned above, auto-complete fields. although not go case , since problem in controller.
pedido.html.twig
{% block content %} <section class="pedido"> <form id="formulario" action="{{ path('crear_pedido', { 'id': app.user.id } ) }}" method="post" {{ form_enctype(form) }}> {{ form_start (form) }} {{ form_errors(form) }} <div id="agrega"> <ul> <li>{{ form_label(form.producto, 'nombre del producto: ') }}</li> <li>{{ form_label(form.cantidad, 'cantidad que va llevar: ') }}</li> <li>{{ form_label(form.valor, 'valor en numero (kgs/lts): ') }}</li> </ul> <ul class="ul_0"> <li>{{ form_widget(form.producto, { 'attr': {'class': 'producto_0'} }) }}</li> <li>{{ form_widget(form.cantidad, { 'attr': {'class': 'cantidad_0'} }) }}</li> <li>{{ form_widget(form.valor, { 'attr': {'class': 'medida_0'} }) }}</li> </ul> </div> <div ><input id="agregarcampo" type="button" value="agregar producto"/></div> <div ><input id="quitarcampo" type="button" value="quitar producto"/></div> <div ><input id="enviar" type="submit" id="submit"/></div> {{ form_end (form) }} </section> {% endblock %} {% block javascripts %} {{ parent() }} <script type="text/javascript" src=" {{ asset('bundles/micarpeta/js/jquery-2.1.4.min.js') }} "></script> <script type="text/javascript"> $(document).ready(function() { var loqueagrego; var busqueda = $('#busqueda'); var contenedor = $("#agrega"); //id del contenedor var addbutton = $("#agregarcampo"); //id del botón agregar var quitbutton = $("#quitarcampo"); var productos = '{% nombre in nombres %}<option value="{{ nombre.articulo }}"> {{ nombre.articulo }} </option>{% endfor %}'; var x = 1; //agregar boton $(addbutton).click(function (e) { //el html que voy agregar loqueagrego = '<ul>'; loqueagrego = loqueagrego + '<li><label>nombre del producto: </label></li>'; loqueagrego = loqueagrego + '<li><label>cantidad que va llevar: </label></li>'; loqueagrego = loqueagrego + '<li><label>valor en numero (kgs/lts): </label></li>'; loqueagrego = loqueagrego + '</ul>'; loqueagrego = loqueagrego + '<ul class="ul_'+x+'">'; loqueagrego = loqueagrego + '<li><select class="producto_0" name="producto[]">'+ productos +'</select></li>'; loqueagrego = loqueagrego + '<li><select class="cantidad_0" name="cantidad[]"></select></li>'; loqueagrego = loqueagrego + '<li><select class="medida_0" name="medida[]"></select></li>'; loqueagrego = loqueagrego + '</ul>'; //lo agrego $(contenedor).append(loqueagrego); x++; //sumo la cantidad de campos que hay return false; }); //quitar boton $(quitbutton).click(function (e){ if (x !== 1){ // si es distinto 1, remuevo los input que no deseo $("#agrega ul:last-child").remove(); $("#agrega ul:last-child").remove(); x--; } return false; }); //le digo que todos los que se agreguen dinamicamente tambien van ser afectados $('#agrega').on("change",".producto_0", function(e){ var elegido = $(this).val(); var medidahermano = $(this).parent().parent().attr("class"); var cantidadhermano = medidahermano; medidahermano = $('.'+ medidahermano +' li:last-child');//recupero el ultimo hijo medidahermano = medidahermano.children(1); //recupero el primer hijo cantidadhermano = $('.'+ cantidadhermano +' li:nth-child(2)'); cantidadhermano = cantidadhermano.children(1); var solido; var liquido; solido = '<option value="1">1</option>'; solido = solido + '<option value="5">5</option>'; solido = solido + '<option value="10">10</option>'; solido = solido + '<option value="15">15</option>'; solido = solido + '<option value="20">20</option>'; solido = solido + '<option value="30">30</option>'; solido = solido + '<option value="50">50</option>'; solido = solido + '<option value="100">100</option>'; liquido = '<option value="6">6</option>' liquido = liquido + '<option value="12">12</option>'; liquido = liquido + '<option value="24">24</option>'; liquido = liquido + '<option value="48">48</option>'; liquido = liquido + '<option value="12">96</option>'; $.ajax({ type: "post", url: "{{ path('que_unidad') }}", data: { 'id' : ' ' + elegido + ' ' }, error: function(){ alert("error petición ajax"); }, success: function(data){ alert(data); if(data == 'kg' | data == 'unidad'){ $(cantidadhermano).html(solido); } else if(data == 'lts'){ $(cantidadhermano).html(liquido); } $.ajax({ type: "post", url: "{{ path('medidas_y_unidades') }}", data: { 'id' : ' ' + elegido + ' ' }, error: function(){ alert("error petición ajax"); }, success: function(data){ $(medidahermano).html(data); } }); } }); }); }); </script> {% endblock %}
3°: assumed error. me way return information ajax , not , because seems it's okay . return information through view, works fine , fields auto . sending form , error.
tablascontroller.php
public function recuperarmedidasyunidadesaction(){ $id = $_post['id']; $em = $this->getdoctrine()->getmanager(); // busco las diferentes unidades que existen (1kg, 5kg, 10kg, etc) $medidas = $em->getrepository('proyectoadminbundle:unidades')->findbyunidadesjoincatalogo($id); return $this->render('atajobundle:ajax:medidasyunidades.html.twig', array('medidas' => $medidas)); } public function recuperarunidadaction(){ $id = $_post['id']; $em = $this->getdoctrine()->getmanager(); // busco las diferentes unidades que existen (1kg, 5kg, 10kg, etc) $unidad = $em->getrepository('proyectoadminbundle:categoria')->findbyunidad($id); return $this->render('atajobundle:ajax:unidad.html.twig', array('unidad' => $unidad)); }
4°:views
medidasyunidades.html.twig
{% medida in medidas %} <option value="{{ medida.medida }}">{{ medida.medida }}</option> {% endfor %}
unidad.html.twig
{{ unidad.unidad }}
a response object requires data in associative array. code gives entity object. have convert entity array.
if convert entity data array use jmsserializer. see other stackoverflow topic
Comments
Post a Comment