2017-10-19 2 views
0

Je travaille sur CodeIgniter et AJAX. Ce que j'essaye de faire que j'ai un datatable qui contient la liste des employés. En cliquant sur le bouton, je reçois le ID de l'employé et l'envoie à mon contrôleur dans lequel je reçois tous les détails nécessaires de la DB de cet employé spécifique. J'ai déjà fait ça. Le problème auquel je suis confronté est que comment puis-je rediriger vers la page viewEmployeeProfile après un appel ajax réussi avec ce détail spécifique employé.recevoir HTML du serveur dans l'appel ajax et charger la page avec ce HTML

Voici mon code:

JS

$('#viewAllEmployeeTable tbody').on('click', '.viewEmployeeDetail', function() { 
    var data = viewAllEmployeeTable.row($(this).parents('tr')).data(); 
    employeeID = data.employeeID; 
    $.ajax({ 
     url: "/ackamarackus/employee/viewEmployeeProfile", 
     type: "POST", 
     data: { 
      "employeeID": employeeID 
     }, 
     dataType: "json", 
     success: function(data) { 
      console.log(data); 
     }, 
     error: function(error) { 
      //console.log(error); 
     } 
    }); 
}); 

viewEmployeeProfile Fonction

public function viewEmployeeProfile() { 
    $employeeID = $this->input->post('employeeID'); 
    $data['employeeBasicDetails'] = $this -> getemployeeBasicDetailsFromDatabase($employeeID); 
    $data['employeeDepartmentalDeails'] = $this -> getemployeeDepartmentalDeailsFromDatabase($employeeID); 
    $data['employeeSalaryDetails'] = $this -> getemployeeSalaryDetailsFromDatabase($employeeID); 
    $data['employeeEducationDetails'] = $this -> getemployeeEducationDetailsFromDatabase($employeeID); 
    $data['employeeJobHistoryDetails'] = $this -> getemployeeJobHistoryDetailsFromDatabase($employeeID); 
    $data['employeeTrainingDetails'] = $this -> getemployeeTrainingDetailsFromDatabase($employeeID); 
    $data['header'] = 'template/header'; 
    $data['sidebar'] = 'template/sidebar'; 
    $data['main_content'] = 'viewEmployeeProfile'; 
    $data['footer'] = 'template/footer'; 

    echo $this -> load -> view('template/template', $data, TRUE); 
} 

vue modèle/template

//This view is generic and implements templating 
$this->load->view($header); 
$this->load->view($sidebar); 
$this->load->view($main_content); 
$this->load->view($footer); 

après la demande console.log(data); me donne le HTML de viewEmployeeProfile view J'ai également essayé d'écho le contenu du tableau $ data comme print_r($employeeBasicDetails); et il me donne l'information correcte. MAIS je ne sais pas comment charger cette vue avec le HTML reçu de l'appel ajax?

Une idée de comment faire cela ou y at-il un bon hack pour cette solution, peut-être que je fais tout faux. Toute contribution à cela sera très appréciée. Merci.

+0

avoir à faire un appel de base de données * par champ * semble un gaspillage extraordinaire et inefficace. Pourquoi ne pouvez-vous pas aller chercher le disque en une fois et extraire les champs qui vous intéressent? Je parie que c'est le résultat de l'écriture d'un ORM de brassage à la maison sans comprendre comment ils sont censés fonctionner. Jetez un oeil à [Doctrine] (http://www.doctrine-project.org/), [Propel] (http://propelorm.org/) et [Eloquent] (https://laravel.com/docs/ 5.3/éloquent) avant de réinventer la roue. – tadman

+0

En utilisant un ORM approprié, cela devrait être aussi simple que 1. Récupérer un enregistrement. 2. Dump champs en tant que JSON. – tadman

+0

@tadman Merci pour cette belle idée, MAIS je vais me concentrer dessus plus tard. Votre réponse n'est pas ce que j'ai demandé dans ma question –

Répondre

0

Cette ligne de votre appel ajax spécifie le type de données à attendre en retour du serveur. Si vous produisez HTML vous devez changer comme vous dites actuellement la demande ajax attendre JSON en retour

dataType: "json" 

Pour l'insérer dans votre page, vous avez juste besoin de spécifier où vous le voulez. Créez un span/div vide et donnez-lui un identifiant, puis dans votre callback réussi, vous pouvez insérer les données retournées dans cet élément sur votre page. Supposons que votre div id était employé alors vous ajoutez ce qui suit à votre rappel de succès:

$('#employee').html(data);