AJAX XMLHttpRequest POST

Posted

技术标签:

【中文标题】AJAX XMLHttpRequest POST【英文标题】: 【发布时间】:2011-05-15 15:26:00 【问题描述】:

我正在尝试使用 POST 方法编写 XMLHttpRequest。我过去曾设法使用 GET 方法使用 XMLHttpRequest,但在使用 POST 时遇到了困难。

这是我的代码:

var xmlhttp = null;
if (window.XMLHttpRequest)
// code for IE7+, Firefox, Chrome, Opera, Safari
    xmlhttp = new XMLHttpRequest();

else
// code for IE6, IE5
    xmlhttp = new ActiveXObject("Microsoft.XMLHTTP");


var url = "http://www.mysite.com/script.php";
var params = "var=1";
xmlhttp.open("POST", url, true);
xmlhttp.send(params);

它基本上调用一个 PHP 脚本,然后将一些信息添加到数据库中。

【问题讨论】:

没有错误,根据 Chrome Inspector 的代码是可以的。 【参考方案1】:

您忘记显式设置Content-type 标头,这在执行 POST 请求时是必需的。

xmlhttp.setRequestHeader("Content-type", "application/x-www-form-urlencoded");

另外,不要忘记使用encodeURIComponent 正确编码您的参数,例如:

var params = "var=" + encodeURIComponent("1");

(在这个特定的例子中,这不是必需的,但是当使用像 + 这样的特殊字符时,如果你不对参数文本进行编码,事情会变得非常糟糕)。

更新 - 您还应该将所有 %20 实例替换为 +,例如

var params = params.replace(/%20/g, '+');

【讨论】:

尝试添加内容类型和编码,但处理脚本仍然没有被调用。 @diggers:处理脚本是什么样的?您可以修改您的问题以包含它吗? @vp_arth ***.com/questions/7718476/… @MarcelKorpel, :) 我的 php 无法识别带有 Content-type 的帖子数据 我花了 2 小时寻找为什么我的 $_POST$_REQUEST 数组是空的,可能是 php 错误,但是有... (PHP 5.4.9-4ubuntu2.4 (cli)) @vp_arth 我刚刚使用 POST 变量进行了快速测试,我的控制台正确输出了发送的变量内容。使用 PHP 5.5.10 在本地测试。您可以通过克隆this repository 并打开xhr-test.html 自己尝试。【参考方案2】:

好的,我已经整理好了。

虽然奇怪的原因可能与沙盒安全有关,但我没有完整的 URL 地址,而是使用了文件的相对路径,现在它可以工作了。

感谢大家的支持。

【讨论】:

以上是关于AJAX XMLHttpRequest POST的主要内容,如果未能解决你的问题,请参考以下文章

ajax之XMLHttpRequest常用方法属性

AJax 学习笔记一(XMLHTTPRequest对象)

详解AJAX核心中的XMLHttpRequest对象

AJAX以及XMLHttpRequest

Ajax-03 XmlHttpRequest实现Ajax

基于XMLHttpRequest的ajax简介