Я делаю почтовый запрос на страницу getremote.php с данными post, но массив $ _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) просто создает строку
Раньше у меня не было этой проблемы и, похоже, не было такого же решения, как у других людей, у которых были проблемы с подобными проблемами. 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 в конец файла
Значение, которое вы передаете 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);
Я никогда не видел, чтобы это было сделано, попробуйте настроить свой заголовок отдельно от тела 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;