关于php:jquery $ .post空数组

jquery $.post empty array

我正在使用jQuery将表单发布到php文件,这是用于验证用户详细信息的简单脚本。

1
2
3
4
5
6
7
8
var emailval = $("#email").val();
var invoiceIdval = $("#invoiceId").val();

$.post("includes/verify.php",
       {invoiceId:invoiceIdval , email:emailval },
       function(data) {
          //stuff here.
});

PHP代码:

1
2
3
<?php
print_r($_POST);
?>

我看一下萤火虫中的响应,它是一个空数组。 该数组应至少具有一些值。

我无法弄清楚为什么$_POST在php文件中不起作用。 Firebug显示该帖子包含发布的内容,电子邮件和发票ID,而在php文件中实际上什么也没收到。

表格:

1
<form method="post" action="<?=$_SERVER['PHP_SELF']; ?>" enctype="application/x-www-form-urlencoded">

有人知道它在做什么吗?

谢谢

找到了这个-http://www.bradino.com/php/empty-post-array/

那条明智的路要走?


$.post()将数据传递给底层的$.ajax()调用,该调用默认情况下设置了application/x-www-form-urlencoded,所以我认为不是这样。

你可以试试这个吗?

1
2
3
4
5
var post = $('#myForm').serialize();    

$.post("includes/verify.php", post, function(data) {
    alert(data);
});

serialize()调用将获取form.myForm中的所有当前数据。


我被同一个问题咬住了,我发现欧文给出的解决方案不合适。您可以自己序列化对象,而jQuery应该为您完成。在这种情况下,您也可以执行$ .get()。

我发现在我的情况下,实际上是从/ mydir到/ mydir /(带斜线)的服务器重定向使POST数组无效。该请求已发送到/ mydir中的index.php

这是在本地计算机上,因此我无法检查HTTP流量。我会早发现的。


1
application/x-www-form-urlencoded

有你的答案。它被发布了,您只是在$ _POST数组中寻找变量。您真正想要的是$ _REQUEST。与名称相反,$ _ POST包含在请求正文中提交的输入变量,而与提交方法无关。 $ _GET包含从URL的查询字符串解析的变量。如果只想提交变量,请使用$ _REQUEST全局变量。

如果您希望接收文件上传,则要创建一个包含$ _FILES内容的新数组:

$ arguments = $ _REQUEST + $ _FILES;


我尝试了Owen的给定功能,但也收到了空白警报。奇怪,但我注意到它将输出查询字符串并返回空白警报。然后我会再次提交,它将以正确的帖子值发出警报。

还使用id属性在html中设置了字段名称(这是我在遵循的jquery教程中所做的操作)。这不允许我的表单字段进行序列化。当我将ID切换为名称时,它解决了我的问题。

毕竟,我最终还是选择了$ .ajax,因为它确实满足了我的期望。


我有一种情况,就是在使用jQuery提交表单之前,我使用jQuery禁用了所有输入(甚至是我想要的隐藏输入)。我将jQuery更改为仅禁用"按钮"类型输入,现在在提交表单时发布了隐藏的变量!看来,如果将隐藏输入设置为禁用,则其值不会与表单一起发布!

已更改:

1
$('input').attr('disabled',true);

至:

1
$('input[type=button]').attr('disabled',true);