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é
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:
J'ai récemment rencontré ce problème, mais pour d'autres raisons:
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!
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;
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.
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.