Bonjour j'explique le souci.
J'utilise CakePhp et Ajax avec Jquery.

Je vais chercher une donnée dans la BDD (ici l'id du dernier enregistrement) et je veux récupérer cet ID via Jquery lorsque la fonction Ajax est passée.

Pour cela j'utilise Ajax.done.

Côté serveur PHP, j'execute une fonction qui fait un enregistrement en BDD et qui me retourne l'ID de l'enregistrement :

$id  = $this->ChapterPost->id;
return $id;
// J'ai débuggé $id et le serveur me renvoie 
// bien un id. Par exemple la valeur '44'.

Côté Jquery :

$(document).on('click', '.addExistingPost', function(event) {
event.preventDefault();

 $.ajax({
     type: 'GET',
     url: $(this).data('href')
  // dataType: 'json'
     }).done(function(data) { 
     console.log(data);
     alert(data);

   });
   return false;
});

Mon problème est le suivant :
en observant le retour avec le console.log, En local avec WAMP, je récupère bien l'ID , en revanche, dès que je passe sur le serveur en ligne (OVH), je récupère une chaîne vide.

Auriez vous une idée du problème ???

5 réponses


betaWeb
Réponse acceptée

Salut,

Lorsque tu fais un appel Ajax sur un script PHP, tu dois echo la data que tu veux récupérer.
Donc dans ton cas tu devrais avoir:

$id  = $this->ChapterPost->id;
echo $id;
die(); // On arrête l'execution du script ici

Si tu te sers de ton script d'une autre façon qu'en Ajax, tu devras regarder ton $_SERVER afin de déterminer si le script est appelé via Ajax ou non pour adapter ton retour (return ou echo + die()).

Précision : étant donné que la valeur retournée par PHP est un simple id (par exemple "45"), ce n'est pas un tableau ou un Json.
Est-ce que le problème pourrait venir de là ?

Magnifique ! Merci @betaWeb:)
24h que je me prends la tête la dessus.

Effectivement ta solution fonctionne.

Mais alors je ne comprends pas pourquoi sur une autre requête AJAX que je fais dans les mêmes conditions (une autre fonction PHP) , tout fonctionne et ça me retourne bien des données alors que j'utilise le return et pas le echo ? (Précision : cette fois la valeur retournée est un tableau Json et j'ai précisé le dataType:'json' en paramètre de la requête Ajax).

En tout les cas, merci pour ta précision concernant la possibilité de voir si la requête est appelé en Ajax via $_SERVER et adapter le terme de retour de valeur avec return ou echo+die(). Je ne savais pas et ça va bien me servir.

Bonne journée ;)

Pas de soucis ! ;)

Je ne connais pas CakePHP plus que ça mais je pense qu'il doit y avoir une fonction du genre $this->request->is('ajax'), qui te permetta de connaître le type de requête ;)

Pour ce qui est du fait que ça ait fonctionné pour une de tes requêtes retourant du JSON, c'est peut-être CakePHP qui est capable d'analyser le type de content-type et le http_request et de retourner le contenu adéquat. Je m'avance peut-être car je ne connais vraiment pas CakePHP.

Tout à fait juste, Cakephp permet de tester si la requête est en Ajax ou non.
Merci encore. Ca m'a bien aidé à dépasser ce point et à comprendre.