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的主要内容,如果未能解决你的问题,请参考以下文章