J'ai identifié un problème avec postdata n'étant pas envoyé via AJAX sur mon serveur. Pour déboguer, j'écrit ce qui suit morceau assez minimaliste de javascript pour tester un simple appel AJAX:AJAX postdata travaillant sur localhost mais pas sur le serveur (Apache)
function my_custom_ajax(target_page, target_element , postdata_contents) {
// Sending the XMLHttpRequest as postdata
var xhr = new XMLHttpRequest();
xhr.open("POST", target_page, true);
xhr.setRequestHeader("Content-Type", "application/x-www-form-urlencoded;");
xhr.setRequestHeader("Content-length", postdata_contents.length);
xhr.setRequestHeader("Connection", "close");
xhr.send(postdata_contents);
// Waiting for the request to return
xhr.onreadystatechange = return_data;
// If all went well, we update the target element
function return_data()
{
if(xhr.readyState === 4)
{
if(xhr.status === 200)
{
// We update the target element
document.getElementById(target_element).innerHTML = xhr.responseText;
}
// Throw error in case of 404 or such
else
document.getElementById(target_element).innerHTML = "XHR can't be loaded";
}
// Throw error in case request got interrupted or didn't work out
else
document.getElementById(target_element).innerHTML = "XHR error";
}
}
Il est appelé avec le code HTML suivant:
<div onClick="my_custom_ajax('test_page.php?xhr','my_id','postdata_test');">
Click me
</div>
<div id="my_id">
xhr response will appear here
</div>
et appelle une page PHP qui contient uniquement ceci:
exit(var_dump($_POST));
Lors de l'exécution ce morceau de code dans mon localhost Apache ou un autre serveur Apache que je possède, il ne passe tout ce qui est en postdata_contents comme postdata. La sortie (var_dump ($ _ POST)); montre que cela fonctionne correctement et imprime la valeur du postdata que je lui ai passé.
Cependant, lors de l'exécution de ce même code sur le serveur Apache où il ne fonctionne pas, tout ce que j'obtiens est «array (0) {}», comme dans, aucun postdata n'est passé selon le fichier PHP.
est ici le point de vue de l'outil de dev de Firefox des détails de la demande (en français, désolé, mais devrait être évident ce qui est quoi):
L'outil de débogage montre que le contenu de Postdata sont correctement envoyés :
Cependant, le spectacle contenu retourné que le postdata était en quelque sorte pas passé:
Sur mon localhost et mon autre serveur Apache, tout est exactement même jusqu'à la dernière étape, où le postdata est bien passé (le message de var_dump est de style mais vous pouvez facilement voir l'essentiel de celui-ci : postdata_test fait partie de $ _POST):
Après des heures de jongler avec la configuration de ce serveur Apache et d'essayer toutes les méthodes de débogage et des points d'arrêt que je pouvais penser, mes nerfs sont trop travaillé jusqu'à continuer à penser rationnellement pour le moment. Comme je n'ai pas la possibilité d'utiliser un autre serveur ou de copier mon fichier de configuration Apache local sur le nouveau serveur, je vous laisse tous cette question, en espérant que quelqu'un puisse la comprendre ou qu'elle ait déjà rencontré quelque chose de similaire.
Merci à l'avance, Eric B.