javascript with XMLHttpRequest的open方法:使用post及其参数

时间:2009-09-14 16:33:43

标签: php javascript post xmlhttprequest

理想情况下,我网站的用户将在大约一个小时的时间内向数据库服务器发送几百个帖子(基本上是在线实验)。实验是在js中实现的,所以我试图使用XMLHttpRequest对象发布脚本收集的数据。

我不确定的是如何使用POST参数。我想为$ _POST变量设置大约8个不同的键/值对,以便在发送到数据库服务器之前可以访问.php页面进行处理。我不感兴趣从服务器本身检索任何信息,只发送它(这就是为什么,我不确定它是否是正确的方法,我将readyState条件设置为'1'/ open)。 / p>

这是我目前正在处理的剧本:

function postData(dataList) {

 var xmlhttp = new XMLHttpRequest();
 var processingUrl = "process_exercise_data.php";
 var POSTBody = "";
 POSTBody+="block_type="+encodeURIComponent(dataList[0]);
 POSTBody+="&block_number="+encodeURIComponent(dataList[1]);
 POSTBody+="&trial_type="+encodeURIComponent(dataList[2]);
 POSTBody+="&trial_number="+encodeURIComponent(dataList[3]);
 POSTBody+="&input_value="+encodeURIComponent(dataList[4]);
 POSTBody+="&output_value="+encodeURIComponent(dataList[5]);
 POSTBody+="&prediction_value="+encodeURIComponent(dataList[6]);
 POSTBody+="&error="+encodeURIComponent(dataList[7]);


 xmlhttp.open("POST",processingUrl,true);
 if (xmlhttp.readyState==4) {
  xmlhttp.send(POSTBody);
 }

}

主要目标是使用POST将键/值对发送到.php页面,同时保留在当前页面上(简单的AJAX请求,如果我没有记错的话)。任何意见或建议都非常感谢!

记住,我想要完成的就是让用户,当他/她在特定条件下(在此功能范围之外)以某种方式行动时,调用此函数并将此数据发送到服务器。不需要服务器响应文本。

编辑:

现在我的问题是:我还能在处理php页面中访问$ _POST数组吗?这是一个例子:

$block_type = $_POST['block.type'];

3 个答案:

答案 0 :(得分:2)

您不想设置请求标头。你想要的是发送请求正文。身体应该像

'block_type='+encodeURIComponent(dataList[0])+'&block_number='+encodeURIComponent(dataList[1])

等。猜猜你有这个主意。 Body是您传递给XMLHTTPRequest对象的send()方法的内容。

答案 1 :(得分:2)

考虑使用jQuery,它将使您的任务变得更加容易。使用jQuery.post方法,您只需提供data哈希,您不必担心序列化,正确转义或readyState

答案 2 :(得分:0)

您必须在readyState更改之前致电发送。

替换

xmlhttp.open("POST",processingUrl,true);
if (xmlhttp.readyState=4) {
  xmlhttp.send(POSTBody);
}

xmlhttp.open("POST", processingUrl, false);
xmlhttp.send(POSTBody);

如果您想处理回复,请添加定义xmlhttp.onreadystatechange

xmlhttp.open("POST", processingUrl, false);
xmlhttp.onreadystatechange = function () {
  if (this.readyState === 4) {
    // handle response
  }
};
xmlhttp.send(POSTBody);

编辑:我还想提一下=不是JavaScript相等运算符,它是赋值运算符。使用===进行相等性检查,使用==进行类型转换相等性检查。