gpt4 book ai didi

javascript - 返回 Ajax - 错误 - Symfony2

转载 作者:行者123 更新时间:2023-12-03 09:01:02 25 4
gpt4 key购买 nike

一个多星期以来我无法解决 ajax 问题。我有一个表格,客户可以在其中选择要购买的产品、要购买的数量以及购买的程度(1 公斤、5 公斤等)。一切正常,当您选择产品时,具有相应数量和单位的其他两个字段将自动显示。发送表单时,告诉我以下错误:

The controller must return a response (null given). Did you forget to add a return statement somewhere in your controller?

我将放置所有代码,但实际上问题应该出在驱动程序中。鉴于阅读并不难,我会对每一步进行评论。

1°:首先,将表单发送到 View 。 (显然,先经过路由,但不走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°:我减少了一些代码,这样就不会那么长了。在这里,我展示了表单,并制作了相应的 javascript 来处理动态添加字段,以及我上面提到的自动完成字段。尽管这对案例影响不大,因为问题出在 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 a 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 = '{% for nombre in nombres %}<option value="{{ nombre.articulo }}"> {{ nombre.articulo }} </option>{% endfor %}';
var x = 1;

//agregar boton
$(AddButton).click(function (e) {
//el html que voy a agregar
loqueagrego = '<ul>';
loqueagrego = loqueagrego + '<li><label>Nombre del producto: </label></li>';
loqueagrego = loqueagrego + '<li><label>Cantidad que va a 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 a 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 a 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°:这是假设出现此错误的位置。对我来说,这是将信息返回到ajax的方法,但不是真的,因为看起来好像没问题。通过 View 返回信息,一切正常,字段将自动。但是发送表单时,我收到此错误。

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°: View

medidasYUniidades.html.twig

{% for medida in medidas  %}

<option value="{{ medida.medida }}">{{ medida.medida }}</option>

{% endfor %}

unidad.html.twig

{{ unidad.unidad }}

最佳答案

响应对象需要关联数组中的数据。您的代码给出了一个实体对象。您必须将该实体转换为数组。

如果您想将所有实体数据转换为数组,那么您可以使用 JMSSerializer 。另请参阅此其他 stackoverflow topic

关于javascript - 返回 Ajax - 错误 - Symfony2,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/32302472/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com