J'ai des problèmes pour afficher les noms des terrains de golf dans mon menu déroulant. J'ai un script PHP qui, lorsqu'il est exécuté, renvoie les noms des cours dans ma base de données. Le problème est que lorsque j'applique cela à ma page déroulante index.html et que je l'affiche dans le navigateur, le contenu n'affiche pas la liste déroulante.

<?php


    $db_host = 'localhost';
    $db_user = 'root';
    $db_pass = '';
    $db_name = '';

    $con = mysqli_connect($db_host,$db_user,$db_pass, $db_name);
    if (!$con) {
    die('Could not connect: ' . mysqli_error($con));
    }   


    $sql = "SELECT name FROM courses";

    $result = mysqli_query($con, $sql) or die("Error: ".mysqli_error($con));;

    $courses = array();

    while ($row = mysqli_fetch_array($result))
    {
        array_push($courses, $row["name"]);
    }

    echo json_encode($courses);

?>

Le code ci-dessus génère avec succès les données de la base de données

$(document).ready(function () {
    $.getJSON("getCourseDD.php", success = function(data){
        var options = "";
        for(var i=0; i< data.length; i++){
            options += '<option value ="' + data[i] + '">' + '</option>';
        }
        $("#selectCourse").append(options);
    });
});

Le code ci-dessus ne remplit pas les noms de cours dans le menu déroulant.

L'identifiant de mon menu déroulant est selectCourse.

<form> <select id="selectCourse" </select> </form>

Merci d'avance pour toute aide.

0
Aaron Crawley 21 juil. 2015 à 12:14

5 réponses

Meilleure réponse

Actuellement, vous ne définissez pas le texte de l'option également, utilisez

options += '<option value ="' + data[i] + '">' +  data[i]  + '</option>'

Au lieu de

options += '<option value ="' + data[i] + '">' + '</option>';
0
Satpal 21 juil. 2015 à 09:15

Enregistrez d'abord vos données comme console.log (data) et vérifiez dans la console firebug du navigateur si elle génère une chaîne ou un objet json. S'il s'agit d'une chaîne, vous devez la convertir en objet à l'aide de JSON.parse ().

0
Tuhin Biswas 21 juil. 2015 à 10:08

Utilisez .html(options); à la place de .append(options);.

append() ajouter des données après le tag mais html() insérer des données entre le tag.

Et vous devez également attribuer quelque chose entre les balises, comme

options += '<option value ="' + data[i] + '">' +  data[i]  + '</option>'
0
Aniket Singh 21 juil. 2015 à 09:25

Comme vous utilisez actuellement jQuery, vous voudrez peut-être opter pour cette solution:

for(var i=0; i< data.length; i++)
{
    $("#selectCourse").append(
        $('<option>').text(data[i]).val(data[i])
    );
}
0
TaoPR 21 juil. 2015 à 09:22

Vous devez mettre du texte dans les options ci-dessous:

var dummyData = ['English','Spanish','French','Mandarin'];

$(document).ready(function () {
    var data = dummyData, //This data comes from the ajax callback
        courseOptions = "";

    for(var i=0; i< data.length; i++){
       courseOptions += '<option value ="' + data[i] + '">'+data[i]+'</option>';
    }

   $("#selectCourse").append(courseOptions);

});

Démonstration de travail: jsFiddle

1
Ashwin Aggarwal 21 juil. 2015 à 09:39