Почему массив $ _POST в PHP пуст после запроса с данными поста - PullRequest
2 голосов
/ 23 октября 2010

Я отправляю запрос на страницу getremote.php с данными публикации, но массив $ _POST кажется пустым.Буду признателен, если кто-нибудь скажет мне, что я сделал неправильно.

Код JavaScript для выполнения запроса:

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;

, где this.createEditXMLtext (this.editXMLstruct) просто создаетstring

Раньше у меня не было этой проблемы, и, похоже, у меня нет такого же решения, как у других людей, которые опубликовали подобные проблемы.PHP-код в userProfile.homeurl + "

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

, но строка $ query всегда пуста - я проверил это, добавив echo $ query в конец файла

Ответы [ 2 ]

4 голосов
/ 23 октября 2010

Значение, которое вы передаете send () , должно быть всем телом сообщения, и вы включили в него заголовок.Когда это тело достигает PHP, оно не сможет проанализировать его как закодированные данные формы.

Вместо этого установите тип данных, вызвав 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);
1 голос
/ 23 октября 2010

Я никогда не видел, чтобы это делалось таким образом, попробуйте установить свой заголовок отдельно от тела POST через XMLHttpRequest.setRequestHeader(), например:

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;
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...