通过ajax提交的表单始终返回未选中复选框的TRUE

时间:2013-08-09 08:00:31

标签: jquery ajax forms symfony

我正在构建一个Symfony 2应用程序。我有一个带有一个复选框的表单,我想通过jquery ajax提交。一切正常,但是向我的控制器发送复选框输入的实际值存在问题。它可以被选中或取消选中,但每次都有一个TRUE值。

这是我的JS代码:

$( 'form' ).submit( function( e ) {
    e.preventDefault();
    var values = {};
    $.each( $('input, select ,textarea', '#modal form'), function(i, field) {
        values[field.name] = field.value;
    });

    //when I send var "values" into firebug console, there is real value, but later in controller isnt

    $.ajax({
        type        : $(this).attr( 'method' ),
        url         : $(this).attr( 'action' ),
        data        : values,
        dataType    : "json",
        cache       : false,
        success     : function(response) {
            //some code
        }
    });

这是我的控制器:

public function indexAction()
{
    $request = $this->getRequest();
    $em = $this->getDoctrine()->getManager();
    $repo = $em->getRepository('MyBundle:MyEntity');
    $slides = $repo->findAll();
    $form = $this->createForm(new MyFormType($this->get('router')));

    if ( $request->isMethod( 'POST' ) ) {
        $form->handleRequest( $request );

        if ( $form->isValid() ) {
            $data = $form->getData();

           //In $data['active'], what is my checkbox field is always TRUE value :(

           //another operation with data...
           $response['something'] = something;
           return new JsonResponse( $response );
     }


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

我编辑的其他字段(text,textarea)被正确发送到控制器中。问题仅出现在复选框字段中。

1 个答案:

答案 0 :(得分:1)

如果取消选中,您通常不会向服务器发送复选框值。例如,将Javascript更改为:

$.each( $('input, select ,textarea', '#modal form'), function(i, field) {
    if(!$(this).is(':checkbox') || $(this).is(':checked')) {
        values[field.name] = field.value;
    }
});

在PHP中:

if(isset($data['active'])) {
    // it was checked...
} else {
    // it was not checked...
}