2010-10-23 4 views
2

Je fais une demande de publication à la page getremote.php avec les données de publication, mais le tableau $ _POST semble être vide. Serait reconnaissant si quelqu'un peut me dire ce que j'ai mal fait.

Le code javascript pour faire la demande est

var postdata = "Content-Type: application/x-www-form-urlencoded\n\nedits=" + this.createEditXMLtext(this.editXMLstruct); 
var xmlhttp; 
if (window.XMLHttpRequest) 
    {// code for IE7+, Firefox, Chrome, Opera, Safari 
    xmlhttp=new XMLHttpRequest(); 
    } 
else 
    {// code for IE6, IE5 
    xmlhttp=new ActiveXObject("Microsoft.XMLHTTP"); 
    } 
    dispmes("processing edits"); 
xmlhttp.open("POST",userProfile.homeurl + "?remoteurl=" + userProfile.homeurl + "&cmdeditprofile&password=password",false); 

xmlhttp.send(postdata); 

var response = xmlhttp.responseXML; 

où this.createEditXMLtext (this.editXMLstruct) crée simplement une chaîne

Je n'ai pas eu ce problème avant et ne semble pas avoir la même solution que les autres personnes qui ont signalé des problèmes similaires. Le code php à userProfile.homeurl + "est

header("Content-type: text/xml"); 
$query = '';     
    foreach($_POST as $key => $value){ 
    $query .= "$key=$value&"; 
} 
echo do_post_request($_GET['remoteurl'] . $qstring,$query); 

mais la chaîne $ query est toujours vide - je l'ai vérifié en ajoutant echo $ query au fond du fichier

+0

Êtes-vous sûr à 100% 'POST' est vide? Que fait un 'print_r ($ _ POST); –

+0

Je suppose que les informations d'en-tête doivent être séparées du corps avec deux \ r \ n et pas seulement \ n. HTTP 1.1 spécification: générique message = ligne de départ * (message en-tête CRLF) CRLF [message-body] start ligne = ligne de demande | Status-Line CRLF = – DrDol

+0

Vous devriez certainement envisager d'utiliser un framework javascript comme jQuery, Dojo ou YUI pour gérer vos requêtes AJAX. –

Répondre

4

la valeur que vous passez à send() devrait être l'ensemble du corps de poste, et vous avez inclus un en-tête en elle. Quand ce corps atteint PHP, il va ne parvient pas à l'analyser en tant que données de formulaire codées.

Au lieu de cela, définissez le type de données en appelant setRequestHeader()

//create the postdata, taking care over the encoding 
var postdata = "edits=" + encodeURI(this.createEditXMLtext(this.editXMLstruct)); 

//let server know the encoding we used for the request body 
xmlhttp.setRequestHeader("Content-Type", "application/x-www-form-urlencoded"); 

//and here we go 
xmlhttp.send(postdata); 
+0

Salut, merci pour votre aide - son fonctionne parfaitement maintenant. – David

1

Je ne l'ai jamais vu il fait de cette façon, essayez de régler votre tête séparément du corps pOST via XMLHttpRequest.setRequestHeader(), comme ceci:

var postdata = "edits=" + this.createEditXMLtext(this.editXMLstruct); 
var xmlhttp; 
if (window.XMLHttpRequest) { // code for IE7+, Firefox, Chrome, Opera, Safari 
    xmlhttp = new XMLHttpRequest(); 
} else { // code for IE6, IE5 
    xmlhttp = new ActiveXObject("Microsoft.XMLHTTP"); 
} 
xmlhttp.setRequestHeader("Content-Type", "application/x-www-form-urlencoded") 
dispmes("processing edits"); 
xmlhttp.open("POST", userProfile.homeurl + "?remoteurl=" + userProfile.homeurl + "&cmdeditprofile&password=password",false); 
xmlhttp.send(postdata); 
var response = xmlhttp.responseXML; 
+0

Salut, merci pour votre aide - son travail maintenant :) – David

Questions connexes