IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

jQuery Discussion :

NeatBeans xbug - Option Chrome à vérifier


Sujet :

jQuery

  1. #1
    Membre éprouvé

    Profil pro
    Inscrit en
    Janvier 2010
    Messages
    981
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2010
    Messages : 981
    Points : 1 028
    Points
    1 028
    Billets dans le blog
    36
    Par défaut NeatBeans xbug - Option Chrome à vérifier
    Bonjour à tous,

    Mon problème vient de l'appel au fichier php qui depuis qu'une structure d'emplacement des fichiers a été créée ne fonctionne plus.

    Mon arborescence est la suivante:
    Nom : ajax_url.png
Affichages : 74
Taille : 4,3 Ko

    Tous les fichiers
    1. HTML sont dans le répertoire à la racine : geoloc/
    2. PHP sont dans le répertoire : geoloc/php/
    3. JS que j'ai écrit sont dans le répertoire : geoloc/js/own/



    La page geoloc/index.html appelle geoloc/js/own/LogIn.js => chargée car xdebug via NetBeans passe bien dans LogIn.js

    Dans LogIn.js j'ai la fonction suivante appelée sur le clic d'un boutton
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    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
    function logIn()
    {	// alert("connexion debut");
    	try { 	var y = location.pathname;// => /geoloc/index.html
    		var oSerialData = $("form").serialize();
    		var jqXHR =$.ajax({
    				type: "POST",
    				url: "/geoloc/php/logIn.php",
    				data: oSerialData,
    				dataType: "json" //ici objet JSon mais défaut JSon format texte
    		});
    		jqXHR.done(function( jqXHR ){
    			if (jqXHR.length>0)
    			{	var page = "formulaire.html" ; 
    			   	window.location.replace(page);
    			}else {
    				var msgText = "Profil ou mot de passe invalide";
    				$("#txtError").val(msgText); //document.forms.frmLogIn.txtError.value = msgText;
    			}
    		})   		
    		.error (function( jqXHR, textStatus ){
    			alert ("Erreur " + textStatus + "\n" + jqXHR.valueOf());
    		})
    		.fail (	function( jqXHR, textStatus ){
    			alert ("Erreur " + textStatus + "\n" + jqXHR.valueOf());
    		});
     
    		jqXHR.always (function( jqXHR ){
    			alert("finisihed");
    		});
    	}catch (err) { alert ('Erreur : '+ err.message);}
    }
    J'ai essayé pour l'URL d'ajax, sachant que location.pathname donne
    /geoloc/index.html,
    les chemins suivants sans résultat:
    • url: "/geoloc/php/logIn.php"
    • url: "php/logIn.php"


    Le fichier PHP n'est pas appelé car netBeans ne passe pas dans LogIn.php mais en même temps ni .error, .fail. always sont appelés et là c'est à ne plus rien n'y comprendre. D'ailleurs je n'y comprends rein

    Je serais aussi intéressé par le code pour tester le code erreur 404 avec la méthode jqXHR.statusCode. J'ai adapté un truc vu sur le web comme cela. Cela est-il correcte et pertinent?

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    jqXHR.complete( function(e, xhr, settings)
    {    if(e.status === 200){
            // code
        }else if(e.status === 304){
            //code
        }else{
            //code
        }
    });

    Merci par avance pour toute aide.

    be seeing you Nom : prisoner_number_6_button_be_seeing_you_Xsmall.jpg
Affichages : 70
Taille : 1,9 Ko
    Mal nommer un objet, c'est ajouter au malheur de ce monde, car le mensonge est justement la grande misère humaine, c'est pourquoi la grande tâche humaine correspondante sera de ne pas servir le mensonge
    Poésie 44, n° 17 - Albert Camus

    Mes réponses vous ont aidés, un clic sur leur pouce vert
    Bonjour chez vous

  2. #2
    Rédacteur

    Avatar de danielhagnoul
    Homme Profil pro
    Étudiant perpétuel
    Inscrit en
    Février 2009
    Messages
    6 389
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 73
    Localisation : Belgique

    Informations professionnelles :
    Activité : Étudiant perpétuel
    Secteur : Enseignement

    Informations forums :
    Inscription : Février 2009
    Messages : 6 389
    Points : 22 933
    Points
    22 933
    Billets dans le blog
    125
    Par défaut
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    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
    var jqXHR = $.getJSON( "php/logIn.php", { 'data' : $("form").serialize() } );
     
    setTimeout( function(){
        // Si l'objet différé existe dans l'état "attendre", 
        // alors exécute la méthode fail()
     
        if ( jqXHR && jqXHR.state() === "pending" ){
          jqXHR.abort();
        }
    }, 3000 ); // 3s
     
    jqXHR.done( function( data, textStatus, jqXHR ){
        // succès de la transaction, on doit traiter le contenu de data
        console.log( data, textStatus, jqXHR );
     
    });
     
    jqXHR.fail( function( jqXHR, textStatus, errorThrown ){
        // échec de la transaction, gérer la catastrophe
        console.log( jqXHR, textStatus, errorThrown );
     
    });
     
    jqXHR.always( function( jqXHR, textStatus ){
        // la transaction est terminée
        // nettoyage
        // exécution d'un code dépendant
        console.log( jqXHR, textStatus );
     
    });

    Blog

    Sans l'analyse et la conception, la programmation est l'art d'ajouter des bogues à un fichier texte vide.
    (Louis Srygley : Without requirements or design, programming is the art of adding bugs to an empty text file.)

  3. #3
    Membre éprouvé

    Profil pro
    Inscrit en
    Janvier 2010
    Messages
    981
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2010
    Messages : 981
    Points : 1 028
    Points
    1 028
    Billets dans le blog
    36
    Par défaut
    Bonsoir danielhagnoul,

    Je te remercie une nouvelle fois pour ton aide et de me proposer une méthode dédiée à l'appel d'ajax pour JSON.

    Mais ce que je comprends pas, c'est que tant que tous les fichiers (HTML, JS, PHP) étaient sous la racine, l'appel à LogIn.php fonctionnait. Et maintenant avec la nouvelle arborescence, je n'arrive pas à appeler le fichier LogIn.php depuis myLogIn.js.

    Question: le répertoire courant est celui du fichier :
    1. HTML
    2. JavaScript
    3. PHP


    Autrement dit
    1. si mon index.html est sous la racine/geoloc
    2. que myLogIn.js est sous racine/geoloc/js/own
    3. LogIn.php est sous racine/geoloc/php/


    Quand j'envoie dans l'url php/LogIn.php=> quel est le chemin envoyé dans l'ajax?

    Enfin, à quoi sert setTimeout ?

    be seeing you Nom : prisoner_number_6_button_be_seeing_you_Xsmall.jpg
Affichages : 70
Taille : 1,9 Ko
    Mal nommer un objet, c'est ajouter au malheur de ce monde, car le mensonge est justement la grande misère humaine, c'est pourquoi la grande tâche humaine correspondante sera de ne pas servir le mensonge
    Poésie 44, n° 17 - Albert Camus

    Mes réponses vous ont aidés, un clic sur leur pouce vert
    Bonjour chez vous

  4. #4
    Expert éminent
    Avatar de Watilin
    Homme Profil pro
    En recherche d'emploi
    Inscrit en
    Juin 2010
    Messages
    3 093
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 35
    Localisation : France, Ille et Vilaine (Bretagne)

    Informations professionnelles :
    Activité : En recherche d'emploi

    Informations forums :
    Inscription : Juin 2010
    Messages : 3 093
    Points : 6 754
    Points
    6 754
    Par défaut
    Si malgré tes héroïques tentatives de récupérer un message d'erreur, tu n'as rien, je n'y comprends rien non plus. Mon éternelle méfiance vis-à-vis des IDE me pousserait à mettre NetBeans en cause. As-tu essayé (si c'est possible) d'ouvrir ta page directement dans un navigateur ?
    La FAQ JavaScript – Les cours JavaScript
    Touche F12 = la console → l’outil indispensable pour développer en JavaScript !

  5. #5
    Rédacteur

    Avatar de danielhagnoul
    Homme Profil pro
    Étudiant perpétuel
    Inscrit en
    Février 2009
    Messages
    6 389
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 73
    Localisation : Belgique

    Informations professionnelles :
    Activité : Étudiant perpétuel
    Secteur : Enseignement

    Informations forums :
    Inscription : Février 2009
    Messages : 6 389
    Points : 22 933
    Points
    22 933
    Billets dans le blog
    125
    Par défaut
    Si vous êtes dans le répertoire "geoloc", vous ne devez plus l'inclure dans votre URL.

    Avez-vous testé le code que j'ai proposé ?

    Qu'est-ce qu'il affiche dans la console (touche F12) ?

    Enfin, à quoi sert setTimeout ?
    Comment puis-je interrompre une transaction AJAX ?

    Blog

    Sans l'analyse et la conception, la programmation est l'art d'ajouter des bogues à un fichier texte vide.
    (Louis Srygley : Without requirements or design, programming is the art of adding bugs to an empty text file.)

  6. #6
    Membre éprouvé

    Profil pro
    Inscrit en
    Janvier 2010
    Messages
    981
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2010
    Messages : 981
    Points : 1 028
    Points
    1 028
    Billets dans le blog
    36
    Par défaut
    Bonjour danielhagnoul et Watilin,

    A priori, mon problème serait dû à l'option du Paramétrage des Cookies du browser Google dans lequel je teste mes pages.

    A priori ça ne fonctionne pas avec avec l'option Autoriser le stockage des données locales (recommandé) qui est cochée par défaut
    Par contre, et c'est à prendre avec circonspection,
    ça fonctionne avec l'option Ne conserver les données locales que jusqu'à ce que je quitte ma session de navigation
    Toujours en continuant sur cette piste, j'imagine que le code n'étant pas MAJ, les URL non plus et donc erreur récurrente!

    Ça vous parait plausible comme explication?


    Enfin dernière constatation, avec mon code, il faut que l'option async: false pour $.ajax sinon risque d'avoir des appel à l'objet ajax alors qu'il n'existe pas encore!
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    $.ajax({	async: false,
    	type: "POST",
    	url: "/geoloc/php/formulaire.php",
    	data: oSerialData,
    	dataType: "json"
    });
    Pour mémoire, mon environnement de test, est basé sur NetBeans + xdebug + Google (Chrome + addOn NetBeans connector). Ça fonctionne très bien une fois passé le paramétrage de php.ini du server local.

    Encore un grand merci pour vous être penchés sur mon problème.

    Be seeing you Nom : prisoner_number_6_button_be_seeing_you_Xsmall.jpg
Affichages : 60
Taille : 1,9 Ko
    Mal nommer un objet, c'est ajouter au malheur de ce monde, car le mensonge est justement la grande misère humaine, c'est pourquoi la grande tâche humaine correspondante sera de ne pas servir le mensonge
    Poésie 44, n° 17 - Albert Camus

    Mes réponses vous ont aidés, un clic sur leur pouce vert
    Bonjour chez vous

  7. #7
    Expert éminent
    Avatar de Watilin
    Homme Profil pro
    En recherche d'emploi
    Inscrit en
    Juin 2010
    Messages
    3 093
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 35
    Localisation : France, Ille et Vilaine (Bretagne)

    Informations professionnelles :
    Activité : En recherche d'emploi

    Informations forums :
    Inscription : Juin 2010
    Messages : 3 093
    Points : 6 754
    Points
    6 754
    Par défaut
    Je ne crois pas que G-Chrome soit assez bête pour garder en cache un fichier du système de fichier local, en particulier quand tu rafraîchis explicitement la page avec F5 ; et ton greffon NetBeans Connector doit prévenir ce genre de problème (en tout cas, j'espère). D'autre part, le cache et les données locales sont deux choses différentes.

    En conclusion : non, ça ne me paraît pas plausible comme explication.

    Remarque importante : avec async: false tu rends tes requêtes synchrones. Le A de Ajax signifiant asynchronous, ça fait que tu ne fais plus de l'Ajax (… Mais du Sjax ? ), tu fais quelque chose qui ressemble beaucoup à de la navigation « à l'ancienne », avant Ajax, le navigateur étant gelé le temps que la requête se fasse. C'est très largement considéré comme une mauvaise pratique, et pourtant recommandé dans certains tutoriels, pour la seule raison que c'est légèrement plus facile à coder (et encore, ça dépend du point de vue).

    Depuis jQuery 1.5 (et c'est déjà bien vieux comme version), tu as la garantie que ton résultat est toujours traité si tu utilises .done(). Donc oublie cette option async, efface-la de ta mémoire, neurolazerise-toi, d'ailleurs elle n'existe pas, je ne sais pas de quoi je suis en train de parler.
    La FAQ JavaScript – Les cours JavaScript
    Touche F12 = la console → l’outil indispensable pour développer en JavaScript !

  8. #8
    Membre éprouvé

    Profil pro
    Inscrit en
    Janvier 2010
    Messages
    981
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2010
    Messages : 981
    Points : 1 028
    Points
    1 028
    Billets dans le blog
    36
    Par défaut
    Salut Watilin,

    Je pense que tu soulève un problème de fond quand à mon code. En effet sur la page formulaire.html accessible après avoir validée la page de connexion sur cliquer ici , j'ai systématiquement l'alerte No session found.
    Il est dû à mon code d'initialisation initialisation du formulaire qui à son chargement appelle setInfo:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    function setInfo()
    {	var oDataSQL = ajaxOutput("select");
     
    	if (oDataSQL.length !== 0 )
    	{	$("#txtPrenom") .val( oDataSQL[0]["FIRSTNAME"]) ;
    		$("#txtNom") .val(oDataSQL[0]["LASTNAME"] );
    		setListBox(oDataSQL, "cbFormation");
    		setRating ();
    	}
    	else {	alert("No session found");}
    }
    Or comme ajaxOutput() est asynchrone, ça déroule sans que oDataSQL soit renseigné et j'ai donc le message d'alerte.

    Pourrais-tu m'aider à me neurolazeriser en codant correctement?

    Merci

    Be seeing you Nom : prisoner_number_6_button_be_seeing_you_Xsmall.jpg
Affichages : 60
Taille : 1,9 Ko
    Mal nommer un objet, c'est ajouter au malheur de ce monde, car le mensonge est justement la grande misère humaine, c'est pourquoi la grande tâche humaine correspondante sera de ne pas servir le mensonge
    Poésie 44, n° 17 - Albert Camus

    Mes réponses vous ont aidés, un clic sur leur pouce vert
    Bonjour chez vous

  9. #9
    Expert éminent
    Avatar de Watilin
    Homme Profil pro
    En recherche d'emploi
    Inscrit en
    Juin 2010
    Messages
    3 093
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 35
    Localisation : France, Ille et Vilaine (Bretagne)

    Informations professionnelles :
    Activité : En recherche d'emploi

    Informations forums :
    Inscription : Juin 2010
    Messages : 3 093
    Points : 6 754
    Points
    6 754
    Par défaut
    Tu dois faire en sorte que le traitement if (oDataSql.length !== 0) {} soit différé avec .done(), ce qui implique une modification de ta fonction ajaxOutput. Je vois deux façons de coder ça :
    1. soit remplacer la valeur de retour par le jqXHR de la requête, pour pouvoir attacher le .done() dans la fonction setInfo :
      Code : Sélectionner tout - Visualiser dans une fenêtre à part
      1
      2
      3
      4
      5
      6
      7
      8
      9
      10
      11
      12
      13
      14
      15
      16
      17
      18
      function ajaxOutput()
      {return jqXHR;
      }
       
      function setInfo()
      {	var jqXHR = ajaxOutput("select");
      	jqXHR.done(function (data)
      	{	var oDataSQL = … data … ;
      		if (oDataSQL.length !== 0 )
      		{	$("#txtPrenom") .val( oDataSQL[0]["FIRSTNAME"]) ;
      			$("#txtNom") .val(oDataSQL[0]["LASTNAME"] );
      			setListBox(oDataSQL, "cbFormation");
      			setRating ();
      		}
      		else {	alert("No session found");}
      	});
      }
    2. soit lui passer une fonction en second paramètre, que nous pourrions appeler callback, pour que l'ajout du .done() se fasse au sein de ajaxOutput :
      Code : Sélectionner tout - Visualiser dans une fenêtre à part
      1
      2
      3
      4
      5
      6
      7
      8
      9
      10
      11
      12
      13
      14
      15
      16
      17
      18
      function ajaxOutput( … , callback)
      {	…
      	jqXHR.done(callback);
      	// pas de return
      }
       
      function setInfo()
      {	ajaxOutput("select", function (data)
      	{	var oDataSQL = … data … ;
      		if (oDataSQL.length !== 0 )
      		{	$("#txtPrenom") .val( oDataSQL[0]["FIRSTNAME"]) ;
      			$("#txtNom") .val(oDataSQL[0]["LASTNAME"] );
      			setListBox(oDataSQL, "cbFormation");
      			setRating ();
      		}
      		else {	alert("No session found");}
      	});
      }

    Choisis selon ton style
    La FAQ JavaScript – Les cours JavaScript
    Touche F12 = la console → l’outil indispensable pour développer en JavaScript !

  10. #10
    Membre éprouvé

    Profil pro
    Inscrit en
    Janvier 2010
    Messages
    981
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2010
    Messages : 981
    Points : 1 028
    Points
    1 028
    Billets dans le blog
    36
    Par défaut
    Un grand merci Watilin pour cette belle démonstration, c'est même brillant !!! .

    Je code sans respecter la philosophie de l'approche et donc me retrouve très vite devant des incohérences. Mais je ne désespère pas, surtout avec l'aide de la communauté et bien sûr de la tienne.

    Il faut effectivement que je systématise l'appel aux fonctions anonymes et à fn.SJQuery.

    Qu'une chose à dire


    Be seeing you Nom : prisoner_number_6_button_be_seeing_you_Xsmall.jpg
Affichages : 60
Taille : 1,9 Ko


    PS:Je viens de faire un post sur l'impossibilité d'afficher le streetView dans un onglet dans l'infoWindow d'un marker toujours sur le même site ici. Pourrais tu y jeter un oeil voire 2? Merci!
    Mal nommer un objet, c'est ajouter au malheur de ce monde, car le mensonge est justement la grande misère humaine, c'est pourquoi la grande tâche humaine correspondante sera de ne pas servir le mensonge
    Poésie 44, n° 17 - Albert Camus

    Mes réponses vous ont aidés, un clic sur leur pouce vert
    Bonjour chez vous

Discussions similaires

  1. Ajax Envoyer un fichier à php
    Par Adrien88390 dans le forum jQuery
    Réponses: 1
    Dernier message: 26/01/2014, 14h31
  2. Réponses: 3
    Dernier message: 17/06/2010, 20h40
  3. Réponses: 6
    Dernier message: 02/06/2009, 14h20
  4. [jQuery]Ajax et get avec un fichier php
    Par zabibof dans le forum jQuery
    Réponses: 3
    Dernier message: 08/07/2008, 10h32

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo