i.one i.one - 1 month ago 14
Ajax Question

function save ajax error

i have made function where i can add a row after confirming. the problem is, after submit button, the tables dont reload and show error function alert.actually data success saved and i have to refresh the page so that the table can reload. here is my ajax jquery code:



function reloadPage()
{
window.location.reload()
}

function save()
{
$('#btnSave').text('saving...'); //change button text
$('#btnSave').attr('disabled',true); //set button disable
var url;

if(save_method == 'add') {
url = "<?php echo site_url('activity/save')?>";
} else {
url = "<?php echo site_url('activity/update_activity')?>";
}


// ajax adding data to database
$.ajax({
url : url,
type: "POST",
data: $('#form-input').serialize(),
dataType: "JSON",
success: function(data)
{


$('#myModal').modal('hide');
reloadPage();
$('#btnSave').text('save'); //change button text
$('#btnSave').attr('disabled',false); //set button enable


},
error: function (jqXHR, textStatus, errorThrown)
{
alert('Error adding / update data');
$('#btnSave').text('save'); //change button text
$('#btnSave').attr('disabled',false); //set button enable

}
});
}

<button id="btnSave" onclick="save()" class="btn green">
"fa fa-save"> save</button>





my controller:



public function save() {
$actype = $this->input->post('actype');
$activity_name = $this->input->post('activity_name');
$project = $this->input->post('project');
$portion = $this->input->post('portion');
$activity = $this->input->post('actid');


$data = array(
'activity_type_id'=>$actype,
'activity_name' =>$activity_name,
'project_id' =>$project,
'portion' =>$portion,
'activity_id' => $activity

);
$this->activity->insertactivity($data);

redirect("activity/input");
}





after i've clicked button save,alert('Error adding / update data'),but actually after reload page data has saved.
where is code error in my ajax code?

Answer

Force a reload from the server.

window.location.reload(true);

When you don't specify true the reload may be from the browser cache if available.

Also, in the controller, redirect("activity/input"); is not the appropriate response to an AJAX request. Try something like this instead.

$this->activity->insertactivity($data);
echo json_encode(array('result' => TRUE));

Your controller code could also be much more concise. Consider this

public function save()
{
    $data = array(
            'activity_type_id' => $this->input->post('actype'),
            'activity_name' => $this->input->post('activity_name'),
            'project_id' => $this->input->post('project'),
            'portion' => $this->input->post('portion'),
            'activity_id' => $this->input->post('actid')
    );

    //Assuming insertactivity returns TRUE if the insert works and FALSE if not
    $results['result'] = $this->activity->insertactivity($data);
    echo json_encode($results);
}

You can check the "result" in success function

success: function(data)
{
  if(data.result === true)
  {
    $('#myModal').modal('hide');
    reloadPage();
    $('#btnSave').text('save'); //change button text
    $('#btnSave').attr('disabled',false); //set button enable 
  } else {
    //do something to the DOM to tell about the problem
    //which probably means you should add that to your controller's response.
  }
},