1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146 147 148 149 150 151 152 153 154 155 156 157 158 159 160 161 162 163 164
| /* Script utilisant Ajax */
// Variables globales.
var qcm = ''; // Dossier du QCM.
var nb_q = 0; // nombre de questions dans le QCM.
var q = 1; // numéro de la question actuelle.
var rep = 0; // numéro de la réponse actuelle.
var fini = 0; // indique si le QCM est terminé (affichage du corrigé.
function reception()
{
if (http_request.readyState == 4 && http_request.status == 200)
{
var fichierxml = http_request.responseXML;
if (fini == 1) // Affichage du corrigé.
{
var question, image, explic, reponses;
var xml = fichierxml.getElementsByTagName('question').item(0);
if (xml.childNodes[0].firstChild) question = xml.childNodes[0].firstChild.data;
else question = '';
if (xml.childNodes[1].firstChild) image = xml.childNodes[1].firstChild.data;
else image = '';
if (xml.childNodes[2].firstChild) explic = xml.childNodes[2].firstChild.data;
else explic = '';
reponses = new Array;
for (i = 0; i < xml.childNodes[3].childNodes.length; i++)
{
reponses[i] = new Array;
if (xml.childNodes[3].childNodes[i].firstChild)
reponses[i][0] = xml.childNodes[3].childNodes[i].firstChild.data;
else
reponses[i][0] = '';
reponses[i][1] = xml.childNodes[3].childNodes[i].getAttribute('coul');
}
// remplissage de la page avec les données lues.
document.getElementById('c_titre').innerHTML = ':. Correction : Question '+q+'/'+nb_q+' .:';
var html = '<div id="voir_question">'+question+'</div>';
if (image != '') html += '<div id="voir_image"><img alt="" src="qcm/'+qcm+'/'+image+'" /></div>';
if (explic != '') html += '<div id="voir_explic">'+explic+'</div>';
html += '<div id="voir_reponses">';
rep = 0;
for (i = 0; i < reponses.length; i++)
{
html += '> <a class="'+reponses[i][1]+'">'+reponses[i][0]+'</a><br />';
}
html += '</div>';
document.getElementById('c_cadre').innerHTML = html;
if (q > 1) document.getElementById('bout_0').innerHTML = '<a href="javascript:c_prec();">Question précédante</a>';
else document.getElementById('bout_0').innerHTML = 'Question précédante';
if (q < nb_q) document.getElementById('bout_1').innerHTML = '<a href="javascript:c_suiv();">Question suivante</a>';
else document.getElementById('bout_1').innerHTML = 'Question suivante';
return 0;
}
if (fichierxml.getElementsByTagName('bonnesreponses').item(0) != null)
{
// Le QCM est fini, on affiche le nombre de bonnes réponses.
var bonnes_rep = fichierxml.getElementsByTagName('bonnesreponses').item(0).firstChild.data;
document.getElementById('c_cadre').innerHTML = '<div id="voir_result"><img src="interface/vert.gif" alt="" height="15" width="'+Math.floor(bonnes_rep*200/nb_q)+'" class="no_border_droite" /><img src="interface/rouge.gif" alt="" height="15" width="'+Math.floor((nb_q-bonnes_rep)*200/nb_q)+'" class="no_border_gauche" /><br /><br />Bonnes réponses : '+bonnes_rep+'/'+nb_q+'</div>';
document.getElementById('c_titre').innerHTML = ':. Résultats .:';
document.getElementById('bout_1').innerHTML = '<a href="javascript:corrige();">Voir le corrigé</a>';
return 0;
}
// On récupère les données de la question.
var question, image, explic, reponses;
var xml = fichierxml.getElementsByTagName('question').item(0);
if (xml.childNodes[0].firstChild) question = xml.childNodes[0].firstChild.data;
else question = '';
if (xml.childNodes[1].firstChild) image = xml.childNodes[1].firstChild.data;
else image = '';
if (xml.childNodes[2].firstChild) explic = xml.childNodes[2].firstChild.data;
else explic = '';
reponses = new Array;
for (i = 0; i < xml.childNodes[3].childNodes.length; i++)
{
if (xml.childNodes[3].childNodes[i].firstChild) reponses[i] = xml.childNodes[3].childNodes[i].firstChild.data;
else reponses[i] = '';
}
// remplissage de la page avec les données lues.
document.getElementById('c_titre').innerHTML = ':. Question '+q+'/'+nb_q+' .:';
var html = '<div id="voir_question">'+question+'</div>';
if (image != '') html += '<div id="voir_image"><img alt="" src="qcm/'+qcm+'/'+image+'" /></div>';
if (explic != '') html += '<div id="voir_explic">'+explic+'</div>';
html += '<div id="voir_reponses">';
rep = 0;
for (i = 0; i < reponses.length; i++)
{
html += '<input type="radio" name="rep"'+((i == rep) ? ' checked="checked"' : '')+' onclick="javascript:rep='+i+';" /> '+reponses[i]+'<br />';
}
html += '</div>';
document.getElementById('c_cadre').innerHTML = html;
document.getElementById('bout_1').innerHTML = '<a href="javascript:suiv();">Valider</a>';
}
}
function envoie_req(req)
{
// création du XMLHttpRequest et envoie d'une requête.
if (window.XMLHttpRequest)
{
http_request = new XMLHttpRequest();
if (http_request.overrideMimeType) http_request.overrideMimeType('text/xml');
}
else if (window.ActiveXObject)
{
try { http_request = new ActiveXObject("Msxml2.XMLHTTP") }
catch (e)
{
try { http_request = new ActiveXObject("Microsoft.XMLHTTP") }
catch (e) {}
}
}
if (!http_request) alert('Erreur : Impossible d'initialiser XMLHttpRequest.');
http_request.onreadystatechange = reception;
http_request.open('POST', 'voir_ajax.php', true);
http_request.setRequestHeader('Content-Type', 'application/x-www-form-urlencoded');
http_request.send(req);
}
function init(nb_questions, dossier_qcm)
{
nb_q = nb_questions;
qcm = dossier_qcm;
document.getElementById('bout_1').innerHTML = 'Valider'; // On masque le bouton jusqu'à reception des données.
envoie_req(null);
}
function suiv()
{
q ++;
document.getElementById('bout_1').innerHTML = 'Valider'; // On masque le bouton jusqu'à reception des données.
envoie_req('rep='+rep);
}
function corrige()
{
q = 1;
fini = 1;
document.getElementById('bout_1').innerHTML = ''; // On masque le bouton jusqu'à reception des données.
envoie_req('q='+q);
}
function c_suiv()
{
q ++;
document.getElementById('bout_0').innerHTML = 'Question précédante'; // On masque le bouton jusqu'à reception des données.
document.getElementById('bout_1').innerHTML = 'Question suivante'; // On masque le bouton jusqu'à reception des données.
envoie_req('q='+q);
}
function c_prec()
{
q --;
document.getElementById('bout_0').innerHTML = 'Question précédante'; // On masque le bouton jusqu'à reception des données.
document.getElementById('bout_1').innerHTML = 'Question suivante'; // On masque le bouton jusqu'à reception des données.
envoie_req('q='+q);
} |
Partager