【问题标题】:AJAX XMLHttpRequest POSTAJAX 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 的代码是可以的。

标签: javascript ajax post xmlhttprequest


【解决方案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:处理脚本是什么样的?您可以修改您的问题以包含它吗?
  • @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 地址,而是使用了文件的相对路径,现在它可以工作了。

感谢大家的支持。

【讨论】:

    猜你喜欢
    • 2011-02-17
    • 1970-01-01
    • 1970-01-01
    • 2016-03-03
    • 2020-11-21
    • 2011-06-29
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多