我使用帖子数据向页面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)只是创建一个字符串
我之前没有遇到过这个问题,似乎没有其他发布类似问题的人那样解决方案。 userProfile.homeurl上的php代码+“是
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添加到文件底部来检查它
答案 0 :(得分:4)
您传递给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 :(得分:1)
我从未见过这样做过,请尝试通过XMLHttpRequest.setRequestHeader()
将POST标题与POST正文分开设置,如下所示:
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;