[RESOLU] ajax php --- function(data)

Petit nouveau ! | 7 Messages

16 oct. 2012, 22:00

Bonjour a tous

Je suis archi debutant en ajax et j'essaie de faire un truc simple pour commencer
je veux juste recuperer l'état d'un code 'true' ou 'false' apres un prog php.:

les parametres sont bien passés en GET et le prog se déroule normalement
Le prog met bien la variable $code_retour dans le bon état (j'ai vérifié)

je récupère la valeur ici
...
$.ajax ({
url : "datesbooking_unit.php?unite=un&da=da&dd=dd&nr=nr",
data : $("#code_retour").val(),
error: function() { alert("erreur !"); },
success: function(data){ alert( "retour : " + data ); }
});
...

L'alert m'affiche "retour:" et jamais le contenu de data

Un truc m'echappe, je cherche depuis un moment évidemment... j'ai essayé avec $.get,$.getJSON...

Si quelqu'un a une idée merci d'avance

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

16 oct. 2012, 23:05

salut,


as tu regarder ou debugguer le javascript (avec l'extension xdebug de firefox par exemple ou l'extension "developpeur" de chrome) ?

c'est le point de départ être certain de ce qui se passe coté "client" (le navigateur).

ensuite tu peux faire la même chose avec php (et xdebug). un tuto sur la chose : http://julien-pauli.developpez.com/tuto ... hp/xdebug/


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

Petit nouveau ! | 7 Messages

17 oct. 2012, 08:25

merci pour ta reponse

je suis debutant en ajax mais pas en prog donc oui jai debuggé le php il me retourne bien le code
le pb est de le recuperer en js avec le bout de code $.ajax ou autre
impossible de l'afficher

un peu obscur ajax...

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

17 oct. 2012, 10:03

utilise l'extension développeur de chrome afin d'utiliser le débogueur javascript.
Tu pourras ainsi voir ce dont dispose JS, en mettant un point d’arrêt sur la ligne de l'alerte (que tu aura mis seule sur la ligne suivante ^^). tu devrait voir ce que contient cette variable.

il est comment le script php qui est appelé ? (datesbooking_unit.php?unite=un&da=da&dd=dd&nr=nr)

coté jquery, la doc indique que success est dépréciée, tu devrais donc plutôt utiliser .done pour être de la compatibilité avec les futures versions.

tu devrais ajouter le "dataType" ça aiderais peut être un peu.

as tu des erreurs dans la console JS ?

Sans le code php on peu pas trop t'aider pour aller plus loin

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

Petit nouveau ! | 7 Messages

17 oct. 2012, 11:54

ok je crois qu je ne comprends pas grand chose
sans doute que le prog php ne renvoie rien finalement

je veux bien te passer le source php, le principe est de controler qu'une unité (de location) est libre ou pas pour une plage de dates (de sejour)

<?php

header("Content-Type: text/html");

if(isset($_GET['unite'])) $unit=$_GET['unite']; //unite
if(isset($_GET['da'])) $da=$_GET['da']; //date arrivee
if(isset($_GET['dd'])) $dd=$_GET['dd']; // date depart
if(isset($_GET['nr'])) $nr=$_GET['nr']; // n° de reservation si modif


if($unit)
{


include("connexion.php");

$sqlb="select * from booking where unite='$unit' order by date_arr";
$resb=mysql_query( $sqlb, $db_link);
$nbb=mysql_num_rows($resb);

$DBO=array(); // dates deja bookées pour l'unité
$DSE=array(); // date sejour a controler
$x=0;$z=0;


for($i=0;$i<$nbb;$i++)
{
$DA=mysql_result($resb,$i,"date_arr") ;
$DD=mysql_result($resb,$i,"date_dep") ;

$sqls="SELECT date_cal from calendrier
where date_cal>='$DA' and date_cal<='$DD' ";
$ress=mysql_query( $sqls, $db_link);
$nbs=mysql_num_rows($ress);

for($j=0;$j<$nbs;$j++)
{
$DC=mysql_result($ress,$j,"date_cal") ;
$DBO[$x]=$DC;
$x++;
}
}



$sqls2="SELECT date_cal from calendrier
where date_cal>='$da' and date_cal<='$dd' ";
$ress2=mysql_query( $sqls2, $db_link);
$nbs2=mysql_num_rows($ress2);

for($j=0;$j<$nbs2;$j++)
{
$DC=mysql_result($ress2,$j,"date_cal") ;
$DSE[$z]=$DC;
$z++;
}
}

$code_retour="true";
// controle si dates de sejour existent deja
for($w=0;$w<count($DSE)-1;$w++)
{

$key=array_search($DSE[$w],$DBO);
if($key) {$code_retour="false"; break;}

}
//for($y=0;$y<count($DBO)-1;$y++)
//{
//echo 'DBO['.$y.']'.$DBO[$y].'<br>';
//}
//for($y=0;$y<count($DSE)-1;$y++)
//{
//echo 'DSE['.$y.']'.$DSE[$y].'<br>';
//}

// ici le code retour est bon
$data = json_encode($code_retour);
?>


... je cafouille a la recup peut etre

var r;
$.ajax({
type : 'GET',
url: "datesbooking_unit.php",
data: "unite=un&da=da&dd=dd&nr=nr",
dataType: "html",
async: false,
success: function(msg) {r = msg;}
});

alert('retour :'+r);

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

17 oct. 2012, 18:54

ton code fonctionne parfaitement.

le code php n'affiche rien et donc data est vide.

Le truc a comprendre avec ajax c'est qu'il fait la même chose que si tu utilisais l'url dasn la barre de navigation de ton navigateur préféré.

docn la sit u met datesbooking_unit.php?unite=un&da=da&dd=dd&nr=nr (avec le localhost/repertoire ou le vhost qui va bien devant) tu aura exactement la même chose.

donc la rien.

donc à la fin du code php : echo json_encode($code_retour);

test avec ton navigateur tu devrais y voir tes données formatées en JSON.

attention a ton header c'est bien du text que tu envoi mais pas du html :)
text/plain serait plu indiqué ;)


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

Petit nouveau ! | 7 Messages

17 oct. 2012, 20:45

merci pour ta reponse

en fait ce que jai du mal a comprendre cest comment ajax recupere quoi !
de '$code_retour', un nom de variable quelconque genre 'msg' suffit?
pourquoi choisit il de renvoyer seulement cette variable dans 'msg 'et pas toutes les autres ?

oui jai debuggé le php en l'appelant directement et $code retour est bien dans l'etat dans lequel il doit etre depuis le debut

json_encode ne met que des "" autour de la valeur, ok
maintenant soit l'alerte affiche toujours retour : "true" même lorsqu'il devrait etre a "false"
soit toujours retour : (blanc)

je m'acharne mais c'est vraiment tres penible et peu intuitif
merci encore

Petit nouveau ! | 7 Messages

17 oct. 2012, 20:55

... oui jai modifié le header en text/plain...

Petit nouveau ! | 7 Messages

17 oct. 2012, 22:11

je crois avoir compris qu'il faut faire un echo dans le php pour alimenter une variable globale de retour

jai fait un echo des parametres d'entree et de sortie
jai donc bien un contenu dans la fenetre alert de la page appelante (et je suis bien content!)

en comparant lecho sur la page php appelée directement
et l'alert de la page appelante
les données en get sont identiques (normal)

mais la clé de recherche dans le tableau nest pas la meme et donc le code retour different (et donc faux)
?????? ça avance mais ouf!

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

17 oct. 2012, 23:10

donc à la fin du code php : echo json_encode($code_retour);
^^

quand aux reste netbeans / eclipse / zend studio (ou autre qui sais utiliser xdebug) + xdebug + extension dev de chrome pour déboguer php + JS en mettant des points d’arrêt dans les endroits qui vont bien :)


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

ViPHP
AB
ViPHP | 5818 Messages

18 oct. 2012, 03:45

coté jquery, la doc indique que success est dépréciée, tu devrais donc plutôt utiliser .done pour être de la compatibilité avec les futures versions.
C'est le jqXHR.success() qui est déprécié, pas le success dans une requête ajax de type $.ajax({...,success: });
D'ailleurs si tu essaies de mettre un done à la place d'un success dans une telle requête elle ne fonctionnera pas (je m'en suis aperçu en mettant mon code à jour pour la version 1.8.2).
Au passage, en passant à la 1.8.2 j'ai dû remplacer outerWidth() par outerWidth(false) sinon ça me renvoyait un objet (idem pour outerHeight()), bref les valeur par défaut de ces fonctions sont mal gérées.

Petit nouveau ! | 7 Messages

18 oct. 2012, 11:40

merci a tous pour votre aide
jy suis enfin arrivé
le pb essentiel et que je ne voyais plus etait un passage de dates mal formatées

en tous cas jaurais appris quelque chose
merci encore