2017-05-02 13 views
1

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.

Répondre

1

résolu le problème moi-même par hasard, je l'avais mod_dumpio activé sur le serveur et il a commencé à travailler une fois que je l'ai éteint.

Je ne sais pas ce que mod_dumpio faisait pour refuser XHR POST mais pas HTTP POST générique, mais au moins c'est résolu.

Espérons que cela aidera quelqu'un d'autre un jour.(Sur un sidenote, je me suis rendu compte que la requête postdata dans mon exemple a été malformée, aurait dû être «postdata_test =» au lieu de «postdata_test», donc ajoutez ce signe égal si vous êtes coincé dans ma situation et que vous voulez exécuter le mêmes tests que j'ai faits)