[RESOLU] Uncaught TypeError: Cannot read property 'open' of undefined

Eléphant du PHP | 53 Messages

12 sept. 2016, 11:01

Bonjour,

Actuellement sur un project web / application, je rencontre un problème lors de l'envoi de données AJAX .

Etant obligé de passer par AJAX pour écrire dans ma page efficacement (mon prédecesseur a utilisé ce langage), j'aimerai donc réussir à passer sur de ma page javascript à la page AJAX, le problème étant que je n'ai pas besoin d'envoyer des données du JS à l'AJAX, je veux simplement que ma fonction JS m'amène dans la page AJAX afin d'écrire ensuite dans mon html.

Voici le code de ma fonction :
function toSendHeuresOtp(xmlhttp) {

	var formElement = document.getElementById('heures');
	formData = new FormData(formElement);
	formData.append('TODO', 'heures');

	xmlhttp.open('POST', 'controleur/ajaxGestionOTP.php', true);
	xmlhttp.send(formData);
}
J'obtiens l'erreur : Uncaught TypeError: Cannot read property 'open' of undefined

Si quelqu'un connait le moyen simple de passer du JS à l'AJAX sans envoyer de variables ou autres.

:)

Avatar du membre
Administrateur PHPfrance
Administrateur PHPfrance | 9782 Messages

12 sept. 2016, 12:09

Bonjour,

"Ajax", c'est simplement le nom donné à un code javascript qui va aller chercher des données sur le serveur sans recharger la page HTML courante.

Donc je veux bien que tu reformules ta question car elle n'est pas très compréhensible :
j'aimerai donc réussir à passer sur de ma page javascript à la page AJAX
Ma recommandation également est d'utiliser jquery qui est une librairie javascript très simple et puissante pour faire de l'ajax.

L'erreur que tu obtiens indiques que ta variable "xmlhttp" n'est pas définie
Quand tout le reste a échoué, lisez le mode d'emploi...

Eléphant du PHP | 53 Messages

12 sept. 2016, 13:35

Désolé, j'ai fait une faute de frappe.

En fait j'aimerai simplement avoir une fonction javascript qui me permet avec formData.append('TODO', 'heures'), de catcher dans mon fichier ajax le mot 'heures' grâce à if (isset $_POST['TODO'] == 'heures'), et ensuite pouvoir écrire du xml que je récupererai dans ma page php.

Seulement tous mes exemples comportent une variable à transmettre et dans mon cas, je ne voudrai rien envoyer, seulement le moyen de me déplacer dans le fichier ajax au moyen du fonction js.

Merci pour l'erreur je vais travailler la dessus.

Avatar du membre
Modérateur PHPfrance
Modérateur PHPfrance | 8758 Messages

12 sept. 2016, 15:29

salut,

je reprend ce que @rthur à dit "ajax" c'est un mot générique (dans notre, sinon c'est aussi un produit ménager) qui indique la façon de faire une requête http vers un serveur en Javascript.

donc tu as du JS qui fait un appel serveur qui va exécuter du php.
ce javscript requête HTTP de type POST vers page "php" au serveur cette page va vérifier et traiter les paramètres puis, en fonction des paramètres, retourner du xml.
Ensuite la fonction de callback JS digère le xml reçus.

au passage je te conseil d'utiliser du JSON plutôt que xml ;)

@+
Il en faut peu pour être heureux ......

Eléphant du PHP | 53 Messages

12 sept. 2016, 15:33

Désolé de m'être mal exprimé, car j'ai compris tout cela ! La communication entre les langages et surtout ajax avec javascript et php.

J'ai du mal formulé ma question je voulais simplement écrire depuis ma page en ajax !

Je vais me débrouiller, et effectivement je prefererais du JSON mais mon stage m'oblige à rester sur du xml ...

Merci pour les infos !

Avatar du membre
Administrateur PHPfrance
Administrateur PHPfrance | 9782 Messages

12 sept. 2016, 17:41

Tu as peut être compris tout cela, mais tu continues de dire des choses inexactes qui donnes l'impression que c'est flou pour toi.
je voulais simplement écrire depuis ma page en ajax !
Ajax n'écrit pas dans une page. Javascript peut faire une requête en ajax et écrire le résultat dans la page.
Quand tout le reste a échoué, lisez le mode d'emploi...

Eléphant du PHP | 53 Messages

13 sept. 2016, 11:01

Okay je m'exprime mal alors, et j'en suis confus ! J'ai tout de même réussi à accéder à ma page ajax (PHP). Maintenant c'est le trajet retour qui me pose souci :) Pour envoyer des données de mon fichier php (ajax) vers mon fichier Javascript.

Eléphant du PHP | 176 Messages

13 sept. 2016, 11:09

Bonjour,

C'est marrant mais tu continues.

AJAX est l'acronyme de Asynchronous JavaScript and XML
L'AJAX EST du javascript.
Cordialement
Naroth

Eléphant du PHP | 53 Messages

13 sept. 2016, 11:18

je sais bien que l'ajax est du javascript, seulement il se situe dans une page php c'est pour cela que j'ai écrit "php (ajax)" enfin merci pour la petite leçon de morale . Et merci à moogli qui est le seul à avoir tenté de me donner une solution concrete ! Je clos le sujet si c'est pour recevoir des commentaires comme ça.

Avatar du membre
Modérateur PHPfrance
Modérateur PHPfrance | 8758 Messages

13 sept. 2016, 15:06

je sais bien que l'ajax est du javascript, seulement il se situe dans une page php c'est pour cela que j'ai écrit "php (ajax)" enfin merci pour la petite leçon de morale . Et merci à moogli qui est le seul à avoir tenté de me donner une solution concrete ! Je clos le sujet si c'est pour recevoir des commentaires comme ça.
le problème c'est que si l'on ne te comprend pas on ne peux pas t'aider.
C'est surement clair pour toi mais nous on ne connais ni ton projet ni ton code on ne peu pas toujours tout deviner du coup on demande des précisions, on explique un truc pour essayer d'avancer le sujet.

donc pour accéder au serveur tu utilises une requête serveur (souvent appelées ajax avec le bel l'acronyme de naroth). tu passe des paramètres (GET / POST etc) a cette requête.
coté serveur c'est un script php qui répond lorsqu'il finit son traitement un "echo" (ou print etc.) suffit pour renvoyer quelque chose à l'appelant (donc la du JS).

dans ton cas ton fichier php doit afficher du html.

de manière général une requête serveur faite depuis JS tu peux la faire directement dans ton navigateur (requête GET) ou un client rest (POST).

un peu de code pour aller avec ça
<script type="text/javascript">
 $.post('lefichier.php',{'TODO':'heures'})
    .done(function(data){
// traitement du xml
 });
</script>
<?php

if(!empty($_POST['TODO'])){
// ce que tu veux
// on envoi le résultat à l'appelant
    echo '<root><datas><data>...</data></datas></root>';
}
@+
Il en faut peu pour être heureux ......

Eléphant du PHP | 53 Messages

13 sept. 2016, 15:11

Je te remercie de ces précisions et ce modèle de code, j'ai réussi le chemin inverse aussi. Je n'avais effectivement pas compris certains points du rapport entre AJAX PHP HTML, maintenant c'est bien plus clair.

Je ferai en sorte d'être plus sûr de mes connaissances pour les futurs post. :)

Bonne fin de journée !

Et merci encore !