Précédent   Forum des professionnels en informatique > Webmasters - Développement Web > AJAX
AJAX Forum sur la programmation AJAX. Avant de poster : Cours AJAX, FAQ AJAX, Toutes les FAQ JavaScript
Partagez cette discussion sur d'autres réseaux sociaux : Viadeo Twitter Google Facebook Digg Delicious MySpace Yahoo
Réponse Proposer ce sujet en actualité
 
Outils de la discussion
Publicité
'
Vieux 31/01/2011, 21h04   #1
Invité de passage
 
Kristen Tonnelle
Inscription : janvier 2011
Messages : 13
Détails du profil
Informations personnelles :
Nom : Kristen Tonnelle

Informations forums :
Inscription : janvier 2011
Messages : 13
Points : 0
Points : 0
Par défaut Internal Server Error

Bonjour la liste,

Tout nouveau à Ajax j'essaie d'adapter les exemples tirés d'un bouquin à mon besoin personnel : l'aide à la complétion d'un champ de formulaire.

Dès que j'ouvre ma page html, une fenêtre d'alerte me signale une Internal Server Error.
Voici une partie du code javascript :

Code :
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
 
function handleRequestStateChange() 
{
  if (xmlHttp.readyState == 4) 
  {
    if (xmlHttp.status == 200 || xmlHttp.status == 304) 
    {
      try
      {
        handleServerResponse();
      }
      catch(e)
      {
        alert("Erreur de lecture de la réponse : " + e.toString());
      }
    } 
    else
    {
      alert("Problème d'obtention des données :\n" + xmlHttp.statusText);
    }
  }
}
Apparemment le 'statut' n'est jamais à 200. Quelqu'un a-t-il une idée des causes possibles ?

Je travaille en local sous linux avec firefox.

Merci de votre aide
kristen44 est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 01/02/2011, 09h16   #2
Rédacteur/Modérateur
 
Avatar de andry.aime
 
Homme Andry Aimé
Inscription : septembre 2007
Messages : 5 126
Détails du profil
Informations personnelles :
Nom : Homme Andry Aimé
Localisation : Ile Maurice

Informations forums :
Inscription : septembre 2007
Messages : 5 126
Points : 7 270
Points : 7 270
Bonjour,

Si tu as "Internal serveur error", c'est que le status est à 500 mais pas 200. L'erreur vient du coté serveur mais pas javascript; tu auras plus de chance de voir de ce coté. Sinon, xmlHttp est une variable globale?

A+.
andry.aime est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 01/02/2011, 12h27   #3
Invité de passage
 
Kristen Tonnelle
Inscription : janvier 2011
Messages : 13
Détails du profil
Informations personnelles :
Nom : Kristen Tonnelle

Informations forums :
Inscription : janvier 2011
Messages : 13
Points : 0
Points : 0
Merci de ta réponse.

Pour le côté serveur j'ai ça avant le début du code proprement dit, je pensais que c'était suffisant :

Code php :
1
2
3
4
 
<?php
header('Content-Type: text/xml');
...

Quant à la déclaration de la variable, j'ai bêtement pompé dans le bouquin (ayant du mal avec la grammaire javascript) :

Code :
1
2
3
4
5
6
7
8
9
 
// début du code
var xmlHttp = createXmlHttpRequestObject();
 
function createXmlHttpRequestObject() 
{
  var xmlHttp;
  try
   ...
C'est vrai que ça donne l'impression de déclarer deux fois la même variable...
kristen44 est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 01/02/2011, 13h25   #4
Responsable Développement Web

 
Avatar de Bovino
 
Homme Didier Mouronval
Développeur Web
Inscription : juin 2008
Messages : 13 802
Détails du profil
Informations personnelles :
Nom : Homme Didier Mouronval
Âge : 41
Localisation : France, Gironde (Aquitaine)

Informations professionnelles :
Activité : Développeur Web
Secteur : High Tech - Éditeur de logiciels

Informations forums :
Inscription : juin 2008
Messages : 13 802
Points : 35 807
Points : 35 807
Citation:
une fenêtre d'alerte me signale une Internal Server Error.
Ce ne serait pas une question de droits sur ton fichier ?
__________________
Pas de question technique par MP !
Tout le monde peut participer à developpez.com, vous avez une idée, contactez-moi !
Vous possédez un blog et aimeriez diffuser vos billets sur le forum, contactez-moi !
Mes formations video2brain : La formation complète sur JavaScriptJavaScript et le DOM par la pratiquePHP 5 et MySQL : les fondamentaux
Mon livre sur jQuery
Bovino est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 01/02/2011, 19h10   #5
Invité de passage
 
Kristen Tonnelle
Inscription : janvier 2011
Messages : 13
Détails du profil
Informations personnelles :
Nom : Kristen Tonnelle

Informations forums :
Inscription : janvier 2011
Messages : 13
Points : 0
Points : 0
Non, je suis comme Moubarak, j'ai tous les droits. Désolé..

Sérieusement, non, je ne crois pas. Comme je l'expliquai au début, j'adapte l'exercice d'un bouquin sur le sujet. En fait, c'est le second : j'en ai déjà recopié un qui a fonctionné sans problème, avec le même utilisateur, les mêmes répertoires, etc. Et tout marchait nickel. C'est vraiment étrange.
kristen44 est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 01/02/2011, 20h17   #6
Responsable Développement Web

 
Avatar de Bovino
 
Homme Didier Mouronval
Développeur Web
Inscription : juin 2008
Messages : 13 802
Détails du profil
Informations personnelles :
Nom : Homme Didier Mouronval
Âge : 41
Localisation : France, Gironde (Aquitaine)

Informations professionnelles :
Activité : Développeur Web
Secteur : High Tech - Éditeur de logiciels

Informations forums :
Inscription : juin 2008
Messages : 13 802
Points : 35 807
Points : 35 807
Citation:
Envoyé par kristen44 Voir le message
Non, je suis comme Moubarak, j'ai tous les droits. Désolé..
Ben précisément, j'ai récemment eu le cas sur un mutualisé OVH : la création distante via Aptana attribuait un CHMOD 666 et j'obtenais la même erreur, en passant les droits à 644 et c'est passé

En tout cas, une erreur 500, ça ne peut venir ni de JavaScript ni de PHP à priori (à moins que tu demandes à PHP de renvoyer une erreur 500 en header, ce qui serait pour le moins inapproprié )
__________________
Pas de question technique par MP !
Tout le monde peut participer à developpez.com, vous avez une idée, contactez-moi !
Vous possédez un blog et aimeriez diffuser vos billets sur le forum, contactez-moi !
Mes formations video2brain : La formation complète sur JavaScriptJavaScript et le DOM par la pratiquePHP 5 et MySQL : les fondamentaux
Mon livre sur jQuery
Bovino est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 01/02/2011, 22h46   #7
Invité de passage
 
Kristen Tonnelle
Inscription : janvier 2011
Messages : 13
Détails du profil
Informations personnelles :
Nom : Kristen Tonnelle

Informations forums :
Inscription : janvier 2011
Messages : 13
Points : 0
Points : 0
Citation:
Envoyé par Bovino Voir le message
En tout cas, une erreur 500, ça ne peut venir ni de JavaScript ni de PHP à priori (à moins que tu demandes à PHP de renvoyer une erreur 500 en header, ce qui serait pour le moins inapproprié )
Et si et si, ça peut venir du PHP. En fait, ça venait du PHP : j'avais une faute de frappe mysql_fetch-array au lieu de mysql_fetch_array, et c'est ça qui générait l'erreur 500, car je ne l'ai plus après rectification. Je suis un âne bâté !

Ceci dit, mon code javascript me renvoie maintenant une autre erreur :
Citation:
Erreur de lecture de la réponse : TypeError: myDiv is null
Je vous montre le code source (c'est la première fois que j'essaie de créer du xml à partir de PHP et je ne vois pas pourquoi il ne renvoie rien. Mais je ne suis pas certain par exemple de la façon de passer la variable entre parenthèses après createTextNode : guillemets ou pas ?)

Code php :
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
 
<?php
header('Content-Type: text/xml');
 
include ('connect.inc.php');
 
$dom = new DOMDocument();
$respont = $dom->createElement('respont');
$dom->appendChild($respont);
 
$name = $_GET['name'];
$kinnigou = mysql_query("SELECT poz FROM ajaks WHERE poz LIKE '".$name."%"."' LIMIT 15");
while ($linenn = mysql_fetch_array($kinnigou))
{
$kinnig = $dom->createElement('kinnig');
$kinnigText = $dom->createTextNode("$linenn[poz]");
$kinnig->appendChild($kinnigText);
$respont->appendChild($kinnig);
}
 
$xmlString = $dom->saveXML();
echo $xmlString;
 
mysql_close();
?>
kristen44 est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 02/02/2011, 06h45   #8
Rédacteur/Modérateur
 
Avatar de andry.aime
 
Homme Andry Aimé
Inscription : septembre 2007
Messages : 5 126
Détails du profil
Informations personnelles :
Nom : Homme Andry Aimé
Localisation : Ile Maurice

Informations forums :
Inscription : septembre 2007
Messages : 5 126
Points : 7 270
Points : 7 270
Peut-on voir la fonction handleServerResponse() et le code HTML de la page?

A+.
andry.aime est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 02/02/2011, 12h24   #9
Invité de passage
 
Kristen Tonnelle
Inscription : janvier 2011
Messages : 13
Détails du profil
Informations personnelles :
Nom : Kristen Tonnelle

Informations forums :
Inscription : janvier 2011
Messages : 13
Points : 0
Points : 0
Citation:
Envoyé par andry.aime Voir le message
Peut-on voir la fonction handleServerResponse() et le code HTML de la page?

A+.
Ah mais que oui !

js :

Code :
1
2
3
4
5
6
7
8
9
10
11
12
13
 
function handleServerResponse()
{
  var xmlResponse = xmlHttp.responseXML;
  xmlRoot = xmlResponse.documentElement;  
  kinnigArray = xmlRoot.getElementsByTagName("kinnig");
 
  var html = "";  
  for (var i=0; i<kinnigArray.length; i++)
    {html += kinnigArray.item(i).firstChild.data + "<br/>";}
  myDiv = document.getElementById("myDivElement");
  myDiv.innerHTML = "<p>Le serveur a répondu : </p>" + html;
}
et le html tout bête :

Code html :
1
2
3
4
5
6
7
8
9
10
11
12
13
14
 
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
  <head>
    <title>AJAX & PHP</title>
	<meta http-equiv="content-type" content="text/html;charset=utf-8" />
    <script type="text/javascript" src="testajax.js"></script>
  </head>
  <body onload='process()'>
    Kinnigoù : 
    <input type="text" id="myName" />
    <div id="MyDivElement" />
  </body>
</html>
kristen44 est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 02/02/2011, 12h51   #10
Responsable Développement Web

 
Avatar de Bovino
 
Homme Didier Mouronval
Développeur Web
Inscription : juin 2008
Messages : 13 802
Détails du profil
Informations personnelles :
Nom : Homme Didier Mouronval
Âge : 41
Localisation : France, Gironde (Aquitaine)

Informations professionnelles :
Activité : Développeur Web
Secteur : High Tech - Éditeur de logiciels

Informations forums :
Inscription : juin 2008
Messages : 13 802
Points : 35 807
Points : 35 807
Code html :
<div id="MyDivElement" />
Code :
myDiv = document.getElementById("myDivElement");
Attention, JavaScript est sensible à la casse ! Donc MyDivElement != myDivElement
__________________
Pas de question technique par MP !
Tout le monde peut participer à developpez.com, vous avez une idée, contactez-moi !
Vous possédez un blog et aimeriez diffuser vos billets sur le forum, contactez-moi !
Mes formations video2brain : La formation complète sur JavaScriptJavaScript et le DOM par la pratiquePHP 5 et MySQL : les fondamentaux
Mon livre sur jQuery
Bovino est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 02/02/2011, 18h55   #11
Invité de passage
 
Kristen Tonnelle
Inscription : janvier 2011
Messages : 13
Détails du profil
Informations personnelles :
Nom : Kristen Tonnelle

Informations forums :
Inscription : janvier 2011
Messages : 13
Points : 0
Points : 0
Merci Bovino, c'est bien vu !

Hélas, ça ne fait qu'avancer un peu le schmilblick : je n'ai plus aucun message d'erreur, mais aucun mot ne s'affiche encore au lieu de la liste espérée...
kristen44 est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 02/02/2011, 19h07   #12
Rédacteur/Modérateur
 
Avatar de andry.aime
 
Homme Andry Aimé
Inscription : septembre 2007
Messages : 5 126
Détails du profil
Informations personnelles :
Nom : Homme Andry Aimé
Localisation : Ile Maurice

Informations forums :
Inscription : septembre 2007
Messages : 5 126
Points : 7 270
Points : 7 270
Tu ne peux pas faire un innerHTML avec un auto-fermante.
Code :
 <div id="MyDivElement"></div>
A+.
andry.aime est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 02/02/2011, 20h55   #13
Invité de passage
 
Kristen Tonnelle
Inscription : janvier 2011
Messages : 13
Détails du profil
Informations personnelles :
Nom : Kristen Tonnelle

Informations forums :
Inscription : janvier 2011
Messages : 13
Points : 0
Points : 0
Merci Aimé : décidément le terrain est truffé de mines !

Mais bon aucun résultat après modification...
kristen44 est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 02/02/2011, 21h05   #14
Rédacteur/Modérateur
 
Avatar de andry.aime
 
Homme Andry Aimé
Inscription : septembre 2007
Messages : 5 126
Détails du profil
Informations personnelles :
Nom : Homme Andry Aimé
Localisation : Ile Maurice

Informations forums :
Inscription : septembre 2007
Messages : 5 126
Points : 7 270
Points : 7 270
fait un alert pour voir
andry.aime est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 02/02/2011, 21h27   #15
Invité de passage
 
Kristen Tonnelle
Inscription : janvier 2011
Messages : 13
Détails du profil
Informations personnelles :
Nom : Kristen Tonnelle

Informations forums :
Inscription : janvier 2011
Messages : 13
Points : 0
Points : 0
1 - Je la place où l'alerte ?

2 - Je viens de réaliser - enfin, j'espère ne pas dire une grosse ânerie parce que ça commence à s'embrouiller sérieux là-haut - que les lettres tapées par l'utilisateur n'étaient pas transmises au module php. J'ai donc transformé :

Code :
xmlHttp.open("GET", "testajax.php", true);
en

Code :
1
2
name = encodeURIComponent(document.getElementById("myName").value);
xmlHttp.open("GET", "testajax.php?name=" + name, true);
Bon, toujours pas d'affichage d'aucun résultat mais, rassurez-moi, la modif est bienvenue ?
kristen44 est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 02/02/2011, 21h39   #16
Rédacteur/Modérateur
 
Avatar de andry.aime
 
Homme Andry Aimé
Inscription : septembre 2007
Messages : 5 126
Détails du profil
Informations personnelles :
Nom : Homme Andry Aimé
Localisation : Ile Maurice

Informations forums :
Inscription : septembre 2007
Messages : 5 126
Points : 7 270
Points : 7 270
Code :
1
2
3
4
 for (var i=0; i<kinnigArray.length; i++)
    {html += kinnigArray.item(i).firstChild.data + "<br/>";}
     alert(html);
     var myDiv = document.getElementById("myDivElement");
Sinon fait un
Code :
1
2
var xmlResponse = xmlHttp.responseText;
alert (xmlResponse);
andry.aime est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 02/02/2011, 21h45   #17
Invité de passage
 
Kristen Tonnelle
Inscription : janvier 2011
Messages : 13
Détails du profil
Informations personnelles :
Nom : Kristen Tonnelle

Informations forums :
Inscription : janvier 2011
Messages : 13
Points : 0
Points : 0
J'ai essayé sans succès les deux alertes.

Rien ne se passait : c'est comme si je n'avais que le code html !

Et puis j'ai commenté deux lignes que j'avais rajoutées mais sans rapport avec le problème apparemment :

Code :
//var _submitButton=null;
et plus loin :
Code :
//_inputField.autocomplete="off";
et maintenant j'ai un beau message d'erreur (enfin un signe de vie ! et tant qu'il y a de la vie...) :

Code :
Erreur de lecture de la réponse : TypeError: kinnigArray.item(i).firstChild is null
J'en était là de moins désespoir.. je tape un 'a', puis un 'b' et je ne sais pas pourquoi, je recharge la page : et là nouvelle alerte :

Code :
1
2
3
annonce de la page http://localhost (titre de la fenêtre) :
<?xml version="1.0"?>
<respont><kinnig>aba</kinnig><kinnig>abad</kinnig><kinnig>abadenn</kinnig><kinnig>abadennad</kinnig><kinnig>abadenner</kinnig><kinnig>abadiezh</kinnig><kinnig>abadorenn</kinnig><kinnig>abaf</kinnig><kinnig>abafaat</kinnig><kinnig>abafamant</kinnig><kinnig>abafaus</kinnig><kinnig>abafded</kinnig><kinnig>abafder</kinnig><kinnig>abafer</kinnig><kinnig>abafi</kinnig></respont>
Je présume que c'est le résultat de alert (xmlReponse).
Et c'est bien le résultat que j'attendais ! Mais qui ne s'affiche pas dans le DIV...
kristen44 est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 03/02/2011, 18h03   #18
Invité de passage
 
Kristen Tonnelle
Inscription : janvier 2011
Messages : 13
Détails du profil
Informations personnelles :
Nom : Kristen Tonnelle

Informations forums :
Inscription : janvier 2011
Messages : 13
Points : 0
Points : 0
STOOOP !

Ça marche... et ça marchait depuis le début ! Je m'explique :

1 - Le but est bien d'aider à la saisie en faisant des propositions de mots commençant par la ou les lettres déjà tapées par l'utilisateur. Or dans le code javascript, la fonction process() n'était appelée qu'à l'ouverture de la page, avec un champ vide. L'utilisateur pouvait bien taper ce qu'il voulait, la fonction n'était plus appelée ! Pas étonnant que rien ne se passait...

2 - Problème résolu en supprimant l'appel par onLoad et en le remplaçant par un appel via onKeyup :
Code :
<input type="text" id="myName" onKeyup="process()"/>
3 - En fait, j'ai toujours des soucis :
- certaines lettres (ex : 'a') provoquent une erreur :
Erreur de lecture de la réponse : TypeError: kinnigArray.item(i).firstChild is null
- le 'ñ' ne passe pas (et il y en a un paquet)
- j'ai transféré les fichiers sur mon espace perso chez free, et là, rien de rien...

Mais bon, je ne vais pas monopoliser votre attention et je vais tâcher de résoudre tout ou partie des problèmes par moi-même. Si vraiment je cale, je reviendrai demander votre aide. Merci à tous.
kristen44 est déconnecté   Envoyer un message privé Réponse avec citation 00
Réponse Proposer ce sujet en actualité Cette discussion est résolue.
Outils de la discussion



Fuseau horaire GMT +2. Il est actuellement 06h55.


 
 
 
 
Partenaires

Hébergement Web