【发布时间】:2012-11-14 11:48:10
【问题描述】:
我正在研究一个可以启动 ajax 调用的简单链接。在我们的 Ubuntu 服务器退役之前,这按预期工作;我们有一个新的“相同”服务器。当我检查 POST 中的内容时,问题发生在服务器端。 $_POST["scan_date"] 的预期回声是:2012-11-26
实际回显为:2012-11-26scan_date=2012-11-26
这是下面 PHP 代码中的实际回显。 客户端警报给出了这个:2012-11-26,这就是我所期望的。 因此,服务器端似乎正在发生一些事情。我希望回声是“2012-11-26”而不是“2012-11-26scan_date=2012-11-26”
我不明白为什么 POST 数据会这样被弄乱。
PHP:
$date = isset($_POST["scan_date"]) ? $_POST["scan_date"] : date("Y-m-d");
echo $date; //produces 2012-11-26scan_date=2012-11-26 which is bad
JQuery:
var val = $(this).attr('value');
dateSelected = val.replace(/facterOption-/g, "");
dateSelected = $.trim(dateSelected);
alert(dateSelected); //alerts 2012-11-26 which is good
$.ajax({
type: "POST",
dataType: 'json',
url: 'https://someurl',
data: {
scan_date: dateSelected
}
})
更新:我们已经尝试了完全在这个 PHP 项目的代码框架之外的命令行 curl 调用,并且注意到了相同的结果。所以也许 Apache 与此有关。
此外,我们发现添加第二个 POST 参数和值可以解决这个问题。
【问题讨论】:
-
为什么不使用 $.post 而不是 $.ajax ?它当然不能解决您的问题,但“更容易理解和使用”docs.jquery.com/Ajax/jQuery.ajax
-
echo file_get_contents('php://input')说什么?这基本上就是 PHP 在将其解码为$_POST之前收到的内容。 -
杰克,这很有趣,这是我从你的建议中得到的:scan_date=2012-11-09scan_date=2012-11-09
-
绝对奇怪;那么可能是 Apache 的问题。
-
同意。我们注意到,这只发生在我们只使用一个参数 POST 时。当我们使用两个参数 POST 时,就可以了。
标签: php jquery ajax apache post