2016-06-11 106 views
0

我研究了這個代碼,這將使我與阿賈克斯驗證。Codeigniter ajax表單驗證錯誤

我的控制器:

public function create(){ 


    $data = array('success' => false, 'messages' => array()); 

    $this->form_validation->set_rules('PROVINCE','Province Name','trim|required|max_length[30]|callback_if_exist'); 
    $this->form_validation->set_error_delimiters('<p class="text-danger"','</p>'); 

    if($this->form_validation->run($this)){ 

     $data['success'] = true; 
    }else{ 
     foreach ($_POST as $key => $value) { 
      # code... 
      $data['messages']['key'] = form_error($key); 
     } 
    } 

    echo json_encode($data); 
} 

而且我的JavaScript是:

<script> 
    $('#form-user').submit(function(e){ 
     e.preventDefault(); 

     var me = $(this); 

     // perform ajax 
     $.ajax({ 
      url: me.attr('action'), 
      type: 'post', 
      data: me.serialize(), 
      dataType: 'json', 
      success: function(response){ 
       if (response.success == true){ 
        alert('success'); 
       }else{ 
        $.each(response.messages, function(key, value) { 
         var element = $('#' + key); 

         element.closest('div.form-group') 
         .removeClass('has-error') 
         .addClass(value.length > 0 ? 'has-error' : 'has-success') 
         .find('.text-danger') 
         .remove(); 

         element.after(value) 

        }); 
       } 
      } 

     }); 


    }); 


</script> 

起初我如果else語句是:

  if (response.success == true){ 
       alert('success'); 
      }else{ 
       alert('failed'); 

       }); 

但是當我把代碼:

$.each(response.messages, function(key, value) { 
         var element = $('#' + key); 

        element.closest('div.form-group') 
        .removeClass('has-error') 
        .addClass(value.length > 0 ? 'has-error' : 'has-success') 
        .find('.text-danger') 
        .remove(); 

        element.after(value) 

如果驗證失敗,該按鈕不再有效。

+0

* 「按鈕不起作用」 字符串'key' *不是一個適當的技術問題描述。檢查從服務器的實際響應線索 – charlietfl

回答

1

您是硬編碼在PHP的循環,你真正想要的變量$key

變化

$data['messages']['key'] 

$data['messages'][$key] 
+0

是的。而已!謝謝! –