J'ai une zone de texte avec une fonctionnalité de saisie semi-automatique. Mon code est,

<script>
  $(function() {
    var items = [ 'France', 'Italy', 'Malta', 'England', 
        'Australia', 'Spain', 'Scotland' ];

    function split( val ) {
      return val.split( /,\s*/ );
    }
    function extractLast( term ) {
      return split( term ).pop();
    }

    $( "#skills" )
      .autocomplete({
        minLength: 0,
        source: function( request, response ) {
          response( $.ui.autocomplete.filter(
            items, extractLast( request.term ) ) );
        },
        focus: function() {
          return false;
        },
        select: function( event, ui ) {
          var terms = split( this.value );
          // remove the current input
          terms.pop();
          // add the selected item
          terms.push( ui.item.value );
          // add placeholder to get the comma-and-space at the end
          terms.push( "" );
          this.value = terms.join( ", " );
          return false;
        }
      });
  });
</script>

Le code ci-dessus fonctionne bien. Maintenant, le problème est que je veux afficher les valeurs de la base de données au lieu de var items = [ 'France', 'Italy', 'Malta', 'England', 'Australia', 'Spain', 'Scotland' ];. Je veux changer les valeurs à l'intérieur de la variable item.

Mon code de contrôleur de codeigniter est,

$data['skills'] = $this->workdone->getAllSkills();
$this->load->view($page, $data);

Mon code HTML est,

<input type="text" name="skills" id="skills">

J'ai beaucoup essayé. Y-a-t'il une solution.

0
Jithin Varghese 7 mars 2016 à 13:49

3 réponses

Meilleure réponse

La meilleure façon de le faire est de passer la valeur de Codeigniter pour la frontend via AJAX.

Le moyen le plus simple est de l'imprimer comme suit:

var items = ["<?=implode('","',$skills)?>"];

Exemple AJAX (meilleure façon)

Votre jQuery utilisera $ .get ():

var items = [];
$.get(YOUR_CONTROLLER_URL, function(data){
    items = data.skills;
});

Le code de votre contrôleur imprimerait JSON:

$this->output
        ->set_status_header(200)
        ->set_content_type('application/json', 'utf-8')
        ->set_output(json_encode($data))
1
JC Lee 7 mars 2016 à 11:21

ÉTAPE 1: CRÉER UN RÉSEAU SUR LA BASE DE LA REQUÊTE QUELS MAGASINS RANGER COMPRENANT TOUS LES ARTICLES DE LA BASE DE DONNÉES ... PAR EX: $ all_items

ÉTAPE 2: Il ne vous reste plus qu'à utiliser la boucle foreach pour stocker la valeur du tableau php dans le tableau javascript.

<script type="text/javascript" language="javascript">
var all_state = new Array();
<?php foreach($all_items as $k => $v){ ?>
    all_state.push('<?php echo $v; ?>');
<?php } ?>
</script>

ÉTAPE 3: Maintenant, le tableau d'éléments en javascript contiendra tous les états !!

1
Kunal 7 mars 2016 à 11:51

Je n'approuve aucune technique hacky qui utilise des fonctions tableau / chaîne pour simuler un tableau / objet javascript.

Il n'est pas plus simple ou plus stable que d'utiliser json_encode().

Si votre contrôleur ressemble à:

$data['countries'] = ['France', 'Italy', 'Malta', 'England', 'Australia', 'Spain', 'Scotland'];
                     // these are countries, not skills
$this->load->view($page, $data);

Ensuite, votre vue doit simplement déclarer la variable côté client à l'intérieur d'une balise de script avant d'exécuter la fonction personnalisée.

echo '<script>let countries = ' , json_encode($countries) , ';</script>';

Cela rendra le tableau unidimensionnel disponible pour votre script côté client et imprimera ce qui suit dans le document:

<script>let countries = ['France', 'Italy', 'Malta', 'England', 'Australia', 'Spain', 'Scotland'];</script>

Pourquoi json_encode() est-il si parfait? Parce qu'il n'utilisera les guillemets que lorsque le type de données l'exige ET il échappera automatiquement les guillemets dans les valeurs. Cela signifie que peu importe les valeurs que vous passez, votre script ne se cassera pas (à ce moment-là de toute façon).

Si vous passez plusieurs éléments de données côté client, vous pouvez les envoyer tous sous la forme d'une déclaration d'objet unique (contenant de nombreuses paires clé-valeur), ou vous pouvez transmettre chaque valeur séparément.

1
mickmackusa 12 août 2019 à 22:32