Bonjour à tous,
Je vais tacher de vous décrire mon problème.
Je préfère donner trop de détails que pas assez, par avance désolé si mon message est long.
Je développe actuellement une application couteau suisse, qui permet de faire différentes actions (des modifications dans une base de donnée, de façon assistée).
Il y a une page par action possible. Voila le fonctionnement général de celles-ci :
Un formulaire permet de recupérer les informations qui vont construire la requête à jouer. Une fois que le formulaire est validé, il appelle sa propre page, qui détecte un POST et réalise les actions necessaires. Le modèle général des pages est :
Code :
- <?php
- // Le modèle des pages
- if ( (!($_POST) ) {
- // Affichage du formulaire
- echo "<form method='post' name='formID' id='formID' action='/repo/'>";
- // [...]
- } else {
- // Récupération des infos + réalisation des actions.
- }
- ?>
|
Toutes ces pages sont intégrées dans une page globale (index.php) , et appellées via un include individuel.
Pour que tout soit transparant pour l'utilisateur, l'url de l'application doit rester /repo/ sans page ni paramètres à la suite.
Pour cela, j'utilise ajax pour faire un chargement dynamique des pages.
Ma page index contient (parmis d'autre chose) un div, qui sera remplacé dynamiquement par la page dont j'ai besoin :
Code :
- <?php
- // Page index.php
- echo "<div id='page_content'>";
- // include_once('inc/help.php');
- echo "</div>";
- ?>
|
Le gros obstacle survient lors de la validation du formulaire.
Il est necessaire de faire deux actions : valider le formulaire ET appeler la fonction ajax qui inclure la bonne page (celle sur laquelle on travaille).
Pour cela, j'utilise un bouton qui fait les deux actions via un onClick.
Code :
- <?php
- echo "<input type='button' value='Create' style='color:#00aa00' onClick=\"javascript:document.forms['formID'].submit();load_page('inc/createGroup');\">";
- ?>
|
Malheureusement, cela ne fonctionne pas.
Voila le fichier qui contient ma fonction ajax, donné par un ami.
Apparemment, il l'a trouvée sur le net, car en cherchant une solution à mon problème, je suis tombé dessus.
Code :
- function load_page(select) {
- var xhr2 = new_xhr(); //On crée un nouvel objet XMLHttpRequest
- xhr2.onreadystatechange = function(){
- if ( xhr2.readyState == 4 ) { // Actions executées une fois le chargement fini
- if(xhr2.status != 200) { // Message si il se preoduit une erreur
- alert("Erreur - status : "+xhr2.status); // debug
- document.getElementById("page_content" ).innerHTML ="Error code " + xhr2.status;
- } else { // On met le contenu du fichier externe dans la div "page_content"
- document.getElementById("page_content" ).innerHTML = xhr2.responseText;
- }
- } else { // Message affiché pendant le chargement
- alert("loading : "+select+" - state : "+xhr2.readyState); // debug
- document.getElementById("page_content" ).innerHTML = "<center>Loading : "+select+"...</center>";
- }
- }
- xhr2.open("GET", select+".php", true); //Appel du fichier externe
- xhr2.setRequestHeader("Content-Type","charset=iso-8859-1" );
- xhr2.send(null);
- }
|
Avec les bouts de débug que j'ai mis, en validant mon formulaire j'ai :
Citation :
loading : inc/createGroupe - state : 1
Erreur - status : 0
|
Je ne suis pas du tout connaisseur d'ajax, je m'en remet donc à vous.
Pourquoi est ce que le status de xhr2 passe à 0 ?
Comment corriger le problème ?
Je sèche.
Merci d'avance pour votre aide !
Arnaud
Message édité par arnaudfrancois le 07-02-2013 à 10:33:31