2010-05-24 6 views
2

Je voudrais être capable de lire XMLHttpRequest qui est envoyé à une page PHP. J'utilise la fonction Ajax.Request de prototype, et j'envoie une structure XML simple.Comment recevoir XMLHttpRequest avec PHP?

Lorsque j'essaie d'imprimer le tableau POST sur la page PHP, je n'obtiens aucune sortie.

Toute aide appréciée.

EDIT: Voici mon code

<html> 
<head> 

<SCRIPT type="text/javascript" src="prototype.js"></script> 

</head> 
<body> 

<script type="text/javascript"> 

var xml='<?xml version=1.0 encoding=UTF-8?>'; 
xml=xml+'<notification>'; 
xml=xml+'heya there'; 
xml=xml+'</notification>'; 
xml=xml+'</xml>'; 


var myAjax = new Ajax.Request('http://localhost:8080/post2.php',{ 
    contentType: 'text/xml', 
    parameters: xml, 
    method: 'post', 
    onSuccess: function(transport){ alert(transport.status); alert(transport.responseText); } 
}); 

</script> 

</body> 
</html> 

post2.php

Welcome <?php print_r($_POST); ?>!<br /> 
+2

Pouvez-vous poster un code? –

+0

Merci pour votre réponse, s'il vous plaît voir le modifier ci-dessus pour le code. – screenshot345

+1

Donc, vous obtenez Bienvenue Array()! comme résultat? – Joseph

Répondre

1

Vous pouvez utiliser fopen() avec l'emballage input:// ou $HTTP_RAW_POST_DATA.

+1

Ce à quoi le Col fait référence est ici: http://us2.php.net/manual/fr/ini.core.php#ini.always-populate-raw-post-data – Joseph

+0

Directement à partir de la documentation, _ "Avertissement Cette fonctionnalité a été SUPPRIMÉE en PHP 5.6.0 et SUPPRIMÉE à partir de PHP 7.0.0. "_ –

4

Vous le lirez exactement de la façon dont vous lisez les variables de demande normales.

$_GET['varname'] et $_POST['varname']

+1

A moins que je ne fasse quelque chose de mal, je ne reçois rien d'autre qu'un tableau vide quand j'imprime $ _POST. Dans mon appel ajax, mon paramètre ne devrait être que la chaîne xml au format ' ..., non? Merci pour votre participation. – screenshot345

+1

Vous pouvez essayer de 'print_r ($ _ GET)', juste pour voir si, d'une manière ou d'une autre, il est envoyé via GET. – chris12892

+0

comme @Adrian j'ai obtenu une chaîne vide. –

0

Lorsque vous utilisez « méthode: après » et que vous voulez envoyer un corps de poste, vous avez besoin du paramètre postBody. Donc, quelque chose comme ça peut fonctionner:

var myAjax = new Ajax.Request('http://localhost:8080/post2.php',{ 
    contentType: 'text/xml', 
    postBody: xml, 
    method: 'post', 
    onSuccess: function(transport){ 
     alert(transport.status); alert(transport.responseText); 
    } 
}); 

Mais pourquoi avez-vous construit un document XML autour de votre contenu? Vous pouvez simplement envoyer le message "heya there" avec le postBody sans le code XML.

Edit: Vous trouverez ici toutes les options de Ajax.Request: http://www.prototypejs.org/api/ajax/options

3

php: // entrée vous permet de lire des données brutes POST comme

Welcome <?php print(file_get_contents('php://input')); ?>!<br /> 

Note: php: // input n'est pas disponible avec enctype = "multipart/form-data".

+0

$ rawData = file_get_contents ('php: // input'); // pERFECT upvoted :) –

+0

Fonctionne toujours en php 7 –