web-dev-qa-db-fra.com

jQuery AJAX / POST n’envoie pas de données à PHP

Donc, j'ai ce problème depuis un moment maintenant, et je sais qu'il y a d'innombrables questions sur ce sujet, croyez-moi, j'ai essayé toutes les solutions possibles, mais cela ne fonctionne toujours pas.

Ceci est le plus simple des exemples qui dans mon cas ne fonctionne pas

jQuery:

$.ajax({
    url: "ajax/add-user.php",
    type: "POST",
    data: {name: 'John'},
    success: function(data){
        console.log(data);
    }
});

PHP

echo json_encode($_POST);

C'est ça. Je récupère toujours un tableau vide en réponse. J'ai essayé avec serialize() pour le data: Mais la réponse est toujours vide. Je ne reçois aucune erreur, juste un tableau vide quand je devrais obtenir les valeurs postées.

Si, par exemple, en php j'essaie de echo quelques variables codées en dur, je les ai, mais le $_POST Et le $_GET Ne fonctionnent pas.

Toute solution ou méthode pour identifier le problème?

Merci.

EDIT/SOLUTION

Ok, il semble donc que le problème était avec .htaccess qui réécrit l’URL et supprime l’extension. Dans l'onglet Réseau, la demande a effectivement été déplacée de manière permanente. Suppression de l'extension .php de l'URL ajax: résolue. Merci et désolé de perdre du temps. À votre santé

28
C. Ovidiu

Vous devez définir le type de données sur json dans un appel ajax.

CODE JQUERY:

$.ajax({
  url: "ajax/add-user.php",
  type: "POST",
  dataType:'json',
  data: {name: 'John'},
  success: function(data){
      console.log(data);
  }
});

Dans le même temps, vérifiez votre code backend (php), s'il peut accepter les données json?

Sinon, configurez l'en-tête comme ci-dessous:

CODE PHP:

/**
 * Send as JSON
 */
header("Content-Type: application/json", true);

Bonne codage:

21
dreamweiver

J'ai récemment rencontré ce problème, mais pour d'autres raisons:

  1. Mes données POST ont été redirigées sous le numéro 301
  2. Ma demande de serveur était GET
  3. Je n'ai pas obtenu mes données POST

Ma raison - j'ai eu une URL sur le serveur enregistré comme:

http://mywebsite.com/folder/path/to/service/

Mais mon client appelait:

http://mywebsite.com/folder/path/to/service

Le .htaccess sur le serveur a lu ceci comme une redirection 301 GET vers l'URL correcte et a supprimé les données POST. La solution simple consistait à vérifiez le chemin de l'URL.

@ C.Ovidiu, @MarcB - Vous m'avez tous deux économisé beaucoup d'heures de débogage!

11
Reshape Media

Pourquoi ne pas utiliser jQuery.post ?

$.post("ajax/add-user.php",
       {name: 'John'},
       function(response){
           console.log(response);
       }
);

Ensuite, dans votre PHP vous pouvez enregistrer l’entrée de la manière suivante:

if(isset($_POST["name"]))
{
    $name= $_POST["name"];
    file_put_contents("name.txt", $name)
    header('HTTP/1.1 200 OK');
}
else
{
    header('HTTP/1.1 500 Internal Server Error');
}

exit;
6
BDR

J'avais ce même problème et le problème s'est avéré être l'une de mes variables dans l'objet data était indéfinie. Pour une raison quelconque qui empêchait l'envoi des données de publication. Définir la variable sur autre chose que non défini a résolu le problème.

4
Gavin

Essayez de modifier votre code et utilisez:

$.ajax({url: 'ajax/add-user.php',
type: 'POST',
data: {name: 'John'},
dataType: 'html',
success: function(data){
alert("success");
console.log(data);
},error: function (xhr, ajaxOptions, thrownError) {alert("ERROR:" + xhr.responseText+" - "+thrownError);}
});

(afin que vous receviez une alerte d'erreur et de succès, assurez-vous que html correspond à ce que vous recevez. Ces paramètres supplémentaires vous aideront à affiner vos appels ajax. Ensuite, jouez avec async true/false)

de plus, lancez votre programme ajax/add-user.php dans une nouvelle fenêtre (tapez l’URL) et voyez ce qu’il résonne. Editez le programme et forcez-vous à vous faire écho de quelque chose comme "légende hello world" et voyez si votre ajax reçoit le message .

Bonne chance.

0
gtryonp