Welcome Guest, Not a member yet? Register   Sign In
Cannot get AJAX to work for Post/Create
#18

I got this working. Thank you all for your help and suggestions.

The controller;

PHP Code:
    public function task_create(){
        
$validation = \Config\Services::validation();
        
$rules = [
            
"description" => "required",
        ];
        
$this->validate($rules);
        if (
$validation->run()==FALSE) {
            
$errors $validation->getErrors();
            
//log_message('error', implode($errors));
            
$response = [
                
'success' => 0,
                
'msg' => $errors,
            ];
            echo 
json_encode($response);
        } else {
            
$task = new TaskModel();
            
$description $this->request->getVar('description');
            
$user_id $this->current_user->id;
            
$data = [
                
"user_id"       => $this->current_user->id,
                
"description"   => $description,
            ];
            
//log_message('error', 'id is'.$user_id);
            //log_message('error', 'description is'.$description);
            
if ($task->insert($data)) {
                
$response = [
                    
'success' => 1,
                    
'msg' => "Task created",
                ];
            } else {
                
$response = [
                    
'success' => 0,
                    
'msg' => "Failed to create task",
                ];
            }
            echo 
json_encode($response);    
        }
    } 

The javascript for task_create.js. In the headers I do <script> let ajaxUrl = "'.base_url().'";</script>

PHP Code:
$(function() {
        $(
'#form-task-create').on('submit', function(e) {
            
e.preventDefault();
            var 
form this;
            
//console.log(form);
            
$.ajax({
                
url:  ajaxUrl+'/admin/tasks/create',
                
type: $(form).attr('method'),
                
data: new FormData(form),
                
processDatafalse,
                
contentTypefalse,
                
dataType'json',
                
                
beforeSend: function (xhr)  {       
                    
//xhr.setRequestHeader('X-CSRF-Token' , tokenHash);   
                    
$(form).find('span.error-text').text('');
                },
                
                
success: function(data) {
                    if (
data.success == 1){
                        $(
'#task_index').DataTable().ajax.reload();
                        $(
form)[0].reset();
                        
alert(data.msg);
                        
// sort table to place most recent one on top
                        
var table = $('#task_index').DataTable();
                        
table.order( [ 3'desc' ] ).draw();
                        
//table.rows().eq( 0 ).addClass( 'newlyadded' );
                    
}else{
                        $.
each(data.msg, function(prefixval){
                            
console.log(val);
                            $(
"#error-text").append(val);
                            
//$(form).find('span '+prefix+'_error').text(val);
                        
});
                    }
                    
                },
            });
        });
    }); 

And the view.

Code:
<!-- right side -->
                <div class="col-md-3">
                    <div>
                        <h3>Add a New Task Here</h3>
                        
                    </div>
              
        
                    <form class="form-horizontal" action="<?= route_to('admin/tasks/create'); ?>" method="post" id="form-task-create">
                        
                        <!-- category_name / text input $descriptiont -->
                        <div class="form-group" >
                            <label for="name">
                                Task Description
                            </label>
                            <?php
                            $description = array(
                                'name'        => 'description',
                                'id'          => 'description',
                                'style'       => '',
                                'class'       => 'form-control col-md-6',
                                'placeholder' => ''
                            );
                            echo form_input($description);
                            ?>
                            <span id='error-text' class="text-danger error-text description_error" >here:</span>
                        </div>
                        
                        </br>
                        
                        <div class="form-group">
                            <div class="col-sm-offset-2 col-sm-10">
                                <button type='submit' class="btn btn-primary">Submit</button>
                            </div>
                        </div>
                    
                        <div id="resultDiv">
                            
                        </div>
                    </form>
                    
                </div>

If any questions, pleased to help.
Reply


Messages In This Thread
RE: Cannot get AJAX to work for Post/Create - by spreaderman - 06-20-2022, 12:04 AM



Theme © iAndrew 2016 - Forum software by © MyBB