11487 sujets

JavaScript, DOM et API Web HTML5

Pages :
(reprise du message précédent)

Pour l'instant mon site initial est hébergé. Je suis en train de le refondre totalement (css et pages), du coup, j'utilise Wamp. Je travailles donc en localhost pour l'instant pour tout voir en temps réel Smiley cligne . Une fois fini, je changerais les fichiers hébergés par les nouveaux.

J'ai vérifié et revérifié, l'adresse est bonne. Pas de soucis de lettrage ou d’itinéraire... j'ai copié collé le nom du fichier, j'ai même modifié l'emplacement pour le mettre dans le même dossier "pages" mais le résultat est le même.
je crois que mon soucis est mon script makeHtml.php, ou la fonction js. Je ne vois pas d'autre explication.
J'ai donc utilisé ce script avec pour url celle pour me connecter au serveur, ça fonctionne.
Ce dont je ne suis donc pas certain, c'est l'url que j'utilise et la fin de ce script.
<?php
$ref = $_POST['ref'];
$url = $ref;
/* fontionne*/
	Require_once CORE.DS.'connectwebdav.php';
	//------------------
	


		// Je modifie $html pour avoir une page avec des liens qui fonctionnent.
		require_once CORE.DS.'simple_html_dom.php';
		$html1 = new simple_html_dom();
		$html1->load($serveur);
		foreach ($html1->find('a') as $a):{ // je cherche les liens
		    $a->id="lien1";
		    $newhref = $url.$a->href; //je fabrique la nouvelle adresse
		    $a->href = '#data'; // je change l'adresse du lien vers une ancre
		    $a->onclick="myGetByAJAX('".$newhref."')"; // vais vers la nouvelle adresse au "CLIC"
		    

		}
		$photo = $html->save();  //je sauvegarde[/#]
		

Modifié par johuv (03 Feb 2019 - 23:49)
Modérateur
Bonjour,

Impossible de savoir où tu fais une erreur comme ça. Y a des bouts de codes dans tous les sens, et qui changent légèrement à chaque nouveau post.

Faut faire des tests intermédiaires.

Par exemple, si dans "makeHtml.php", tu retires tout et tu ne mets qu'une seule ligne :
echo "toto";


Est-ce que ça t'affiche "toto" dans la page où est exécutée myGetByAJAX() ?

Amicalement,
Je deviens fou !
J'ai changé le nom du fichier par "banane.php" et ai modifié le script AJAX.

function myGetByAJAX(ref) {
  var xhr = new XMLHttpRequest();
  xhr.onreadystatechange = function() {
    if (this.readyState == 4 && this.status == 200) {
      document.getElementById('data').innerHTML = this.responseText;
    }
  };
  xhr.open("POST","../core/banane.php",true);
  xhr.send("ref="+ref);
}


J'ai modifié aussi mon code php dans 'banane.php'
<?php
echo toto;}


et le résultat est le même.

fonctiondevelop.js:9 POST  http://localhost:8080/xxx/core/banane.php        404 (Not Found)
myGetByAJAX	@	fonctiondevelop.js:9
onclick	@	photo:114


pourtant, le chemin est bon en tout point...

Edit: la page va bien sur le #data, mais rien ne change. Pas de toto en vue.
Modifié par johuv (06 Feb 2019 - 19:21)
Modérateur
Bonjour,

Mets tes 3 fichiers dans le même dossier (ta page principale, le fichier JS, et le fichier php lancé par le JS). Retire les chemins, et regarde l'erreur disparait !

EDIT: et vide le cache de ton navigateur aussi !

Amicalement,
Modifié par parsimonhi (06 Feb 2019 - 19:29)
Salut,
1ere info, avant de tout mettre dans un même dossier, encore des essaye de chemin, voici le message:
function myGetByAJAX(ref) {
  var xhr = new XMLHttpRequest();
  xhr.onreadystatechange = function() {
    if (this.readyState == 4 && this.status == 200) {
      document.getElementById('data').innerHTML = this.responseText;
    }
  };
  xhr.open("POST","http://localhost:8080/xxx/core/banane.php",true);
  xhr.send("ref="+ref);*
}

* Failed to load resource: the server responded with a status of 404 (Not Found)


Ensuite, j'essaye de mettre dans un même dossier, mais boulet que je suis, je n'arrives pas à mettre les 3 dans le même dossier.
<?php 
// Connection au serveur
$url = 'http://xxx/Medias/Photo/'; 
Require_once CORE.DS.'connectwebdav.php';
//-------------------------
require_once CORE.DS.'simple_html_dom.php';
$html = new simple_html_dom();
$html->load($serveur);
foreach ($html->find('h1') as $title):{
    $title->outertext = '';
}
endforeach;

foreach ($html->find('a') as $a):{ // je cherche les liens
    $a->id="lien1";
    $ref = $url.$a->href; //je fabrique la nouvelle adresse
    $a->href = '#data'; // je change l'adresse du lien vers une ancre
    $a->onclick="myGetByAJAX('".$ref."')";
}
endforeach;

$photo = $html->save();  //je sauvegarde

echo $photo; 
?>

<script type="text/javascript">

function myGetByAJAX(ref) {
  var xhr = new XMLHttpRequest();
  xhr.onreadystatechange = function() {
    if (this.readyState == 4 && this.status == 200) {
      document.getElementById('data').innerHTML = this.responseText;
    }
  };
  xhr.open("POST"," ?????? ",true);
  xhr.send("ref="+ref);
}

</script>

Comment integrer le fameux "banane.php"
echo "je suis mauvais !";
?
Modérateur
Bonjour,
johuv a écrit :
Ensuite, j'essaye de mettre dans un même dossier, mais boulet que je suis, je n'arrives pas à mettre les 3 dans le même dossier.

??? t'es sérieux, là ????

Quand je dis les mettre dans le même dossier, c'est les mettre manuellement dans le même dossier (genre en utilisant l'explorateur windows et la souris).

Amicalement,
Smiley confused Désolé, problème de lecture du mot "dossier".

Le problème est le même en tout cas.

En cherchant, cherchant, cherchant, j'ai fini par me faire une autre théorie de cette erreur.
J'ai donc inséré un petit truc, n'étant pas sûr de la conclusion, et ce que me dit le résultat est que l'erreur 404 n'est pas forcement un problème sur ma page PHP mais bien en amont.
function myGetByAJAX(ref) {
  var xhr = new XMLHttpRequest();
  xhr.onreadystatechange = function() {
    if (this.readyState == 4 && this.status == 200) {
      document.getElementById('data').innerHTML = this.responseText;
    }else{
    	alert("problème de statut ?");        // avant d'arriver à la page banane, y a t-il un pb ?
    }
  };
  xhr.open("POST","../core/banane.php",true);
  xhr.send("ref="+ref);
}


Une alerte me parvient bien
locahost:8080 indique 
problème de statut ?


Que penses-tu de cette conclusion ?
Modérateur
Bonjour,

Ce "problème de statut" indique probablement que la réponse n'est pas encore arrivée. Ce n'est pas une erreur. Ce qui est à l'intérieur de xhr.onreadystatechange = function() est exécuté plusieurs fois jusqu'à ce que la réponse arrive (pour le confirmer, il suffit juste d'afficher this.readyState dans l'alert).

On est bien d'accord que dans banane.php, il n'y a rien d'autre qu'un echo "toto"; ?

Amicalement,
oui..
Je récapitule ce que j'ai:

Mon fichier "affichephotolistserv.php" qui affiche la liste et modifie les liens une première fois:
<?php 
// Connection au serveur
$url = 'http://xxx/Medias/Photo/'; 
Require_once CORE.DS.'connectwebdav.php';
//-------------------------
require_once CORE.DS.'simple_html_dom.php';
$html = new simple_html_dom();
$html->load($serveur);
foreach ($html->find('h1') as $title):{
    $title->outertext = '';
}
endforeach;

foreach ($html->find('a') as $a):{ // je cherche les liens
    $a->id="lien1";
    $ref = $url.$a->href; //je fabrique la nouvelle adresse
    $a->href = '#data'; // je change l'adresse du lien vers une ancre
    $a->onclick="myGetByAJAX('".$ref."')";
}
endforeach;

$photo = $html->save();  //je sauvegarde

echo $photo; 


Mon fichier js qui est executé au Onclick:
function myGetByAJAX(ref) {
  var xhr = new XMLHttpRequest();
  xhr.onreadystatechange = function() {
    if (this.readyState == 4 && this.status == 200) {
      document.getElementById('data').innerHTML = this.responseText;
    }else{
    	alert(this.readyState);
        alert(this.status);
    }
  };
  xhr.open("POST","../core/banane.php",true);
  xhr.send("ref="+ref);
}


Et enfin le dossier maintenant nommé "banane.php" pour être sûr de l'orthographe et qui est la script php exécuté par la fonction js
<?php
echo "toto";


*J'avais exactement même message d'erreur quand les 3 fichiers étaient dans le dossier pages.
*Avec l'alerte actuelle, j'ai bien les 4 étapes.
Par contre, le status ne va pas:
etape 1 > status 0
etape 2 > status 404
etape 3 > status 404
etape 4 > status 404
*c'est cette dernière ligne qui est pointée par l'erreur par l'outil de développement
xhr.send("ref="+ref);

*Ce même outils note bien le lien cliqué qui est correctement nommé
myGetByAJAX('http://xxx/Medias/Photo/Michel%20et%20Lily/')


Edit. suite à cette lecture,
http://www.aliasdmc.fr/coursjavas/cours_javascript167.html
- 1, ouverture de la connexion avec le serveur vient de se faire (open())
- 2, envoi de la requête au serveur (send()
- 3, le serveur est entrain d'envoyer les donnés
- 4, terminée, toutes les données sont disponibles

je peux donc déduire que c'est dès l'envoie que ça pose problème. non ?
Modifié par johuv (09 Feb 2019 - 23:32)
Modérateur
Bonjour,

Mets "banane.php" dans le même dossier que "affichephotolistserv.php", et utilise exactement xhr.open("POST","banane.php",true); dans la fonction myGetByAJAX à titre de test. Une fois que cela marchera, on pourra avancer.

EDIT: le code de banane.php doit être

<?php
echo "toto";
?>


Y a pas d'accolades !

Amicalement,
Modifié par parsimonhi (10 Feb 2019 - 08:37)
J'ai fais exactement ce que tu demande
-> le dossier Banane est dans le mm dossier
-> j'ai copier collé ta ligne open pour être sûr de l'exactitude
-> j'ai ajouté le ?> dans le fichier banane.php et il n'y a pas d'accolade

Le résultat est le même. La ligne 12 est pointée du doigt par l'outil de développement: cette ligne est
 xhr.send("ref="+ref);

failed for load ressource: the server responded with a status of 404 (not found)
Modérateur
Bonjour,
johuv a écrit :
J'ai fais exactement ce que tu demande
-&gt; le dossier Banane est dans le mm dossier

Quel dossier "Banane" ??? C'est un fichier ("banane.php") qui doit être dans le même dossier que "affichephotolistserv.php".

Amicalement,
parsimonhi a écrit :
Bonjour,

Quel dossier "Banane" ??? C'est un fichier ("banane.php") qui doit être dans le même dossier que "affichephotolistserv.php".

Amicalement,


Oui, encore une mauvaise façon de parler. Le fichier "Banane.php" est dans le m^me dossier, c'est à dire le dossier "pages"


parsimonhi a écrit :
Bonjour,

Mets xhr.send(); (mais je ne crois pas que ce soit ça).

Amicalement,


Même soucis, même endroit: ligne 12
xhr.send();




http://localhost:8080/xxx/pages/banane[/url] me renvoit bien "
toto
"



Edit !!!

J'ai eu une révélation !!! en recopiant la lien vers ma page "banane.php", je me suis dit que je ne devais pas mettre ".php" pour avoir la page. Je l'ai donc aussi enlevé dans le script JS et ça marche ! Smiley wingol Une semaine juste pour un ".php" !!!
function myGetByAJAX(ref) {
  var xhr = new XMLHttpRequest();
  xhr.onreadystatechange = function() {
    if (this.readyState == 4 && this.status == 200) {
      document.getElementById('data').innerHTML = this.responseText;
    }else{
    	alert(this.readyState);
    	alert(this.status);
    }
  };
  xhr.open("POST","banane",true);
  xhr.send("ref="+ref);
}


Je vais faire un essaie vers les bons dossiers pour ranger correctement mes codes et te confirme ça aussitot.


Edit2:

Bon, quand je range au bon endroit, ça ne marche pas. Pourtant, dans le dossier core, je mets bien les deux fichiers: "affichephotolistserv.php" et "banane.php". Ce qui m'enduit, c'est quand si je laisses dans le dossier "pages", j'ai le header et footer qui se mettent automatiquement, du coup il y en a deux de chaque: une double page quoi !
Modifié par johuv (10 Feb 2019 - 13:53)
Modérateur
Bonjour,

Tout de ceci est bizarre.

Normalement, il faut cette extension .php.

Y-a-t-il des .htaccess dans tes dossiers ?

Pour ce qui est du header et du footer qui sont rajoutés, je ne comprends rien à ce que tu dis ! Smiley smile

Pour l'instant, il faut faire fonctionner le banane.php (avec l'extension .php) où qu'il soit (ça nécessite de comprendre pourquoi ça ne marche pas pour l'instant).

Mais après, il restera du boulot. Juste pour information pour l'instant :
- le code généré par webdav contient trop de chose qu'il va falloir retirer
- il va falloir modifier myGetByAJAX() pour qu'il crée dans la page principale le conteneur des liens que tu récupères de webdav
- il va falloir gérer le fait que si l'utilisateur a déjà cliqué sur un lien, ce n'est pas la peine d'aller les récupérer une nouvelle fois
- il va éventuellement falloir ajouter un mécanisme cachant/montrant l'arborescence des dossiers et fichiers dans la page principale pour que ce soit plus pratique pour l'utilisateur.

On n'a pas fini. Smiley cligne

Amicalement,
parsimonhi a écrit :
Bonjour,

Tout de ceci est bizarre.

Normalement, il faut cette extension .php.

Y-a-t-il des .htaccess dans tes dossiers ?[...]

L'explication est simple, j'ai fait mon site il y a un bon moment maintenant, et je me suis très fortement aidé avec "créer son site de A à Z" de Grafikart.
Je ne me rappelais plus, mais le site est fait de telle manière qu'un admin peu ajouter des pages sans passer par le language php, juste dans une partie "cachée" du site pour les administrateurs.
Donc, les pages sont formatées pour que le footer et le header soient mis automatiquement.

De plus, j'ai une fonction "render" dans mon contrôler (render($view)) qui renvoie la vue (page) avec ".php" automatiquement. Donc si je mets "banane.php" le contrôller comprend "banane.php.php" et forcement, ça ne fonctionne pas.

La structure principale de mon site est la suivante:
Mon site
/* config
/* controler
/* core ---> point névralgique du site
/* model
/* view
/** pages
/** posts
/* webroot
/** js
/** img
/** css
.htacess

Là, ce qui m'ennuie, c'est que ça fonctionne correctement si "banane.php" EST une PAGE mais pas s'il est dans le core, indépendamment de l'endroit où est "affichephotolistserv.php".
Modérateur
Bonjour,

Je vois. Il faudrait vérifier ce qu'il y a dans les .htaccess et on pourra peut-être faire une exception pour banane.php (ou tout autre nom de fichier).

Amicalement,
Modifié par parsimonhi (10 Feb 2019 - 15:17)
IL n'y a que ça:
RewriteEngine On
RewriteRule (.*) webroot/$1 [L]


Il renvoie à un autre dans le webroot
RewriteEngine On
RewriteCond %{REQUEST_FILENAME} !-d
RewriteCond %{REQUEST_FILENAME} !-f
RewriteRule (.*) index.php/$1 [L]


Et voici l' "index.php" qui se trouve dans le webroot. ce fichier definie juste quelques points.
<?php
$debut = microtime(true); 

define('WEBROOT',dirname(__FILE__)); 
define('ROOT',dirname(WEBROOT)); 
define('DS',DIRECTORY_SEPARATOR);
define('CORE',ROOT.DS.'core'); 
define('BASE_URL',dirname(dirname($_SERVER['SCRIPT_NAME']))); 

require CORE.DS.'includes.php'; 
new Dispatcher(); 
Modérateur
Bonjour,

Quel bazar ! Pas étonnant que y ait rien qui marche. Tout est fait pour que l'utilisation du moindre chemin ne fonctionne pas ! Smiley cligne

Ta seule chance selon moi est de mettre le fichier php ("banane.php" ou un autre) appelé par myGetByAJAX() dans le même dossier que "affichephotolistserv.php". Sinon, ça va être bien compliqué, limite ingérable.

Ou bien tu vires tout et tu repars de zéro !

Amicalement,
Modifié par parsimonhi (10 Feb 2019 - 17:55)
Sauf que le soucis est que "affichephotolisteserv.php" est retournée dans le dossier CORE mais que le fichier actuellement nommé "banane.php" est resté dans le dossier "pages" de "view" sinon, il ne marche pas... Seul "banane.php" ne peut pas bouger sinon, ça ne marche plus.
Modifié par johuv (10 Feb 2019 - 17:59)
Pages :