Welcome Guest, Not a member yet? Register   Sign In
Ajax foreach on view
#1

(This post was last modified: 05-07-2018, 02:56 AM by xenos92.)

Bonjour
J'ai commencé en ajax, je me bats mais le je vraiment dur je voudrais un peu d'aide si possible d'allumer ma lanterne Wink
Je suis sur le framework Codeigniter, je veux faire un système de jeu de type quiz. Quand je clique sur mon bouton, je veux charger la question suivante dans ajax.
Je peux obtenir un jour une seule variable mais il faut faire en ajax, mais je ne vois pas le commentaire ajax recharger tout un foreach et mettre à jour les variables ...

Mon contrôleur: 
Le 'test' est mon contrôleur principal qui affiche mes données. La "ajax_new_question" charge les nouvelles données dans ajax et les renvoie pour tester.

PHP Code:
function test(){
    
$this->get_question_id_random                         $this->question_model->get_question_id_random();
    
$this->data['get_question_id_random']                 = $this->get_question_id_random;
    
$this->data['get_question']                         = $this->question_model->get_question($this->get_question_id_random);
    
    
$this->data['conteneur']            =    'jeu/game/ajax_game';
    
$this->load->view($this->path_template,$this->data);
}

function 
ajax_new_question() {
    
$this->get_question_id_random         $this->question_model->get_question_id_random();
    
$this->data['get_question']        = $this->question_model->get_question($this->get_question_id_random);
    echo 
json_encode ($this->data);


Mon avis : 
Je vais mettre jour de mise à jour a un identifiant de ma question contenue par l'identifiant 'question', je ne vois pas comment on met directement le foreach get_question pour toutes les variables ci-dessous pour se mettre à jour.

PHP Code:
<?php foreach($get_question as $q):?>
    <div class="partie_droite" id="partie_droite">
        <div class="l-bande--dark-2 l-bande--60" id="bloc_question">
            <div class="content">
                <div id="question"><?php echo $q->id?></div>
                
                <?php if($q->type != 3):?>
                    <div class="question"><?php echo $q->question;?></div>
                    <div class="clear"></div>
                <?php endif; ?>
            </div>
        </div>

        <div class="sub_question l-bande--light-1" id="bloc_sub_question">
            <div class="content">
            <?php echo Mybutton::normal(array(
                
'text' => "Question suivante",
                
'class' => 'button button-stroke',
                
'id' => 'button_next_question',
            )); 
?>
            </div>    
        </div>
    </div>
<?php endforeach;?>


Mon modele :
Mes fonctions travaillant sur mon jeu sont en cours de chargement.

PHP Code:
function get_question_id_random()
{    
    
// I picked a random id that matches has my settings

    
$this->db->select('questions.id AS numero_id_question')
                ->
join('game_questions''game_questions.id_question = questions.id')
                ->
where('game_questions.fait'0)
                ->
where('questions.online',1)
                ->
order_by('rand()')
                ->
limit(1);

    
$query $this->db->get('questions');

    
$num_id $query->result();
    if(!empty(
$num_id))
    {
        foreach (
$num_id as $n) {
            
$numero_id_question $n->numero_id_question;
        }
        return 
$numero_id_question;
    }
}
// I display the question that corresponds to the random ID
function get_question($id_question)
{
    
$this->db->where('id',$id_question);
    
$query $this->db->get('questions');

    if(
$query->num_rows()>0)
    {
        foreach (
$query->result() as $row) {
            
$data[] = $row;
        }
        return 
$data;
    }


Mon script:

Code:
/***********************************/
// Function that reloads all settings to display the new question
// Launches when I press the button question
//
function new_question($container){
  $.ajax({
       type: 'GET',
       url: 'http://localhost:8890/app/armee_project/index.php/game/ajax_new_question',
       datatype : 'json',
       async : true,
       success: function(data) {
           data = $.parseJSON(data);
           if(data){
               //console.log(data);
               $("#question").html(data.recup_question[0].id);
               //location.href="http://localhost:8890/app/armee_project/index.php/game/ajax_new_question"
           }
       }
   });
 return false;
}

J'espère recevoir quelques conseils! Merci d'avance.
Reply
#2

(05-06-2018, 01:40 PM)xenos92 Wrote: Mon modele :
Mes fonctions travaillant sur mon jeu sont en cours de chargement.

PHP Code:
function get_question_id_random()
{    
    
// I picked a random id that matches has my settings

    
$this->db->select('questions.id AS numero_id_question')
                ->
join('game_questions''game_questions.id_question = questions.id')
                ->
where('game_questions.fait'0)
                ->
where('questions.online',1)
                ->
order_by('rand()')
                ->
limit(1);

    
$query $this->db->get('questions');

    
$num_id $query->result();// ICI il faut utiliser $query->row() car tu n'as qu'une réponse au max (limit(1))

// Ainsi tu as juste à faire ceci :
if (!empty($num_id)) {
 
   return $num_id->numero_id_question;
}
return 
NULL;
//

    
if(!empty($num_id))
    {
        foreach (
$num_id as $n) {
            
$numero_id_question $n->numero_id_question;
        }
        return 
$numero_id_question;
    }
}
// I display the question that corresponds to the random ID
function get_question($id_question)
{
    
$this->db->where('id',$id_question);
    
$query $this->db->get('questions');

    if(
$query->num_rows()>0)
    {
        foreach (
$query->result() as $row) {
            
$data[] = $row;
        }
        return 
$data;
    }


Bonjour,

Bon, on va commencer par le modèle d'abord. Tu dois pouvoir simplifier en réunissant tes 2 fonctions en une seule.

PHP Code:
// récupère une question au hasard
function get_random_question() {
 
   $this->db
                
->select('questions.*')
 
               ->from('questions')
 
               ->join('game_questions''game.questions.id_question = questions.id')
 
               ->where('questions.online'1)
 
               ->where('game_questions.fait'0)
 
               ->order_by('rand()');

 
   // renvoie un objet (1 question) ou NULL
 
   return $this->db->get()->row();
}

// l'objet $oQuestion (par exemple) :
// Tu accèdes aux colonnes de ta table ainsi :
//  $oQuestion.id, etc... 

Déjà un bon début. Tu devrais revoir ce lien https://www.codeigniter.com/user_guide/d...sults.html
Reply
#3

(This post was last modified: 05-09-2018, 12:14 PM by yiujia.)

Ensuite dans ton contrôleur :

PHP Code:
function test(){
 
  $aViewData = array();
 
  $oQuestion $this->question_model->get_random_question();
 
  $aViewData['oQuestion'] = '';
 
  if (!empty($oQuestion)) {
 
         $aViewData['oQuestion'] = $oQuestion;
 
  }
 
   $aViewData['conteneur'] = 'jeu/game/ajax_game';
 
   $this->load->view($this->path_template$aViewData);


Ensuite dans ta vue :

PHP Code:
<div class="partie_droite" id="partie_droite">
 
       <div class="l-bande--dark-2 l-bande--60" id="bloc_question">
 
           <div class="content">
 
               <div id="question"><?php echo $oQuestion->id?></div>
                
                <?php if($oQuestion->type != 3):?>
                    <div class="question"><?php echo $oQuestion->question;?></div>
                    <div class="clear"></div>
                <?php endif; ?>
            </div>
        </div>

        <div class="sub_question l-bande--light-1" id="bloc_sub_question">
            <div class="content">
            <?php echo Mybutton::normal(array(
 
               'text' => "Question suivante",
 
               'class' => 'button button-stroke',
 
               'id' => 'button_next_question',
 
           )); ?>
            </div>    
        </div>
</div> 
Reply
#4

Pour l'ajax, tu peux faire un truc du genre :



Code:
function new_question(){
 $.ajax({
      type: 'POST',
      url: 'http://localhost:8890/app/armee_project/index.php/game/ajax_new_question',
      success: function(data) {
          data = $.parseJSON(data);
          if(data){
              //console.log(data);
              $("#question").html(data['oQuestion'].id);
              $(".question").html(data['oQuestion'].question);
          }
      }
  });
return false;
}

$('#button_next_question').on('click', function() {
   new_question();
});


et dans le contrôleur :


PHP Code:
function ajax_new_question() {
 
   $aResponse = array();
 
  $oQuestion $this->question_model->get_random_question();
 
  $aResponse['oQuestion'] = '';
 
  if (!empty($oQuestion)) {
 
         $aResponse['oQuestion'] = $oQuestion;
 
  }
 
  
   
return json_encode($aResponse);

Reply
#5

Hi,
Wow thank you yuijia ! Very helpful post I test this soon thank you Wink
Reply




Theme © iAndrew 2016 - Forum software by © MyBB