我正在使用jQuery将表单发布到php文件,这是用于验证用户详细信息的简单脚本。
var emailval = $("#email").val();
var invoiceIdval = $("#invoiceId").val();
$.post("includes/verify.php",
{invoiceId:invoiceIdval , email:emailval },
function(data) {
//stuff here.
});
PHP代码:
<?php
print_r($_POST);
?>
我看一下firebug中的响应,它是一个空数组。该数组应该至少有一些值。
我无法理解为什么$_POST
无法在php文件中运行。 Firebug显示帖子包含发布的内容,电子邮件和发票ID,在php文件中实际上没有收到任何内容。
表格:
<form method="post" action="<?=$_SERVER['PHP_SELF']; ?>" enctype="application/x-www-form-urlencoded">
任何人都知道它在做什么?
感谢
发现了这个 - http://www.bradino.com/php/empty-post-array/
这是一条明智的路线吗?
答案 0 :(得分:14)
$.post()
将数据传递给基础$.ajax()
调用,默认设置为application/x-www-form-urlencoded
,所以我认为不是这样。
var post = $('#myForm').serialize();
$.post("includes/verify.php", post, function(data) {
alert(data);
});
serialize()
来电将抓取form.myForm
中的所有当前数据。
答案 1 :(得分:4)
我被同样的问题所困扰,我发现Owen给出的解决方案并不合适。你自己序列化对象,而jQuery应该为你做。在这种情况下你也可以做$ .get()。
我发现在我的情况下,它实际上是从/ mydir到/ mydir /(带有斜杠)的服务器重定向,使POST数组无效。请求被发送到/ mydir
中的index.php这是在本地计算机上,所以我无法检查HTTP流量。如果我愿意的话,我会早些发现的。
答案 2 :(得分:1)
application/x-www-form-urlencoded
有你的答案。它已经发布了,你只是在寻找$ _POST数组中的变量。你真正想要的是$ _REQUEST。与名称相反,$ _POST包含在请求正文中提交的输入变量,而不管提交方法如何。 $ _GET包含从URL的查询字符串解析的变量。如果您只想要提交变量,请使用$ _REQUEST global。
如果您希望接收文件上传,那么您想要创建一个包含$ _FILES内容的新数组:
$ arguments = $ _REQUEST + $ _FILES;
答案 3 :(得分:0)
我尝试了Owen的给定功能,但也得到了一个空白警报。奇怪但我注意到它会输出一个查询字符串并返回一个空白警报。然后我再次提交,它将提醒正确的帖子值。
还使用id属性在html中设置了字段名称(这是我在以下的jquery教程中完成的方式)。这不允许我的表单字段序列化。当我将id改为name时,它解决了我的问题。
我最终选择了$ .ajax,因为它完成了我想要的工作。
答案 4 :(得分:-1)
我有一个案例,我使用jQuery在使用jQuery提交表单之前禁用所有输入(甚至是我想要的隐藏的输入)。我改变了我的jQuery只禁用“按钮”类型输入,现在提交表单时发布了隐藏的变量!似乎如果您将隐藏的输入设置为禁用,则其值不会以表单形式发布!
更改:
$('input').attr('disabled',true);
为:
$('input[type=button]').attr('disabled',true);