jQuery $.post 空数组

4
我正在使用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中查看响应,发现是一个空数组。这个数组应该至少有一些值。

我无法弄清楚为什么php文件中的$_POST不起作用。Firebug显示提交内容包含所发布的内容、电子邮件和发票ID,但实际上在php文件中没有接收到任何内容。

表单:

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

有人知道它正在做什么吗?

谢谢


发现这个 - http://www.bradino.com/php/empty-post-array/

这是一个明智的路线吗?

5个回答

14

$.post()方法将数据传递给底层的$.ajax()调用,它默认设置为application/x-www-form-urlencoded,因此我认为不是这个问题。

你可以尝试这个:

var post = $('#myForm').serialize();    

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

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


4

我也遇到了同样的问题,但是我发现Owen给出的解决方案并不合适。你自己序列化对象,而jQuery应该为你完成这个过程。在这种情况下,你可以使用$.get()。

我发现,在我的情况下,实际上是从/mydir重定向到/mydir/(带斜杠),导致POST数组无效。请求被发送到了/mydir中的index.php。

这是在本地机器上发生的,所以我无法检查HTTP流量。如果我早些这样做,我会更早地发现这个问题。


1
这么随意的事情竟然让我感到如此烦恼...感谢您的评论! - zenkaty
你真的很棒。 - supernifty

1
application/x-www-form-urlencoded

这就是你要的答案。它已经被发布了,你只需要在 $_POST 数组中查找变量。你真正想要的是 $_REQUEST。与名称相反,$_POST 包含在请求主体中提交的输入变量,无论提交方法如何。$_GET 包含从 URL 查询字符串解析出的变量。如果你只想要提交的变量,请使用 $_REQUEST 全局变量。

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

$arguments = $_REQUEST + $_FILES;


这对我来说并不重要。POST和REQUEST都无法工作。我不确定问题出在哪里,但是序列化(上面的代码)似乎可以工作,所以我只是改用了$.get。 - Jake

0

我尝试了Owen提供的函数,但是也得到了一个空白的警告。奇怪的是,我注意到它会输出一个查询字符串并返回一个空白的警告。然后我再次提交,它就会用正确的帖子值警告。

同时,在HTML中使用id属性设置字段名称(这是我遵循的jQuery教程的方式)也不允许我的表单字段序列化。当我将id更改为name时,问题得到解决。

最终,我还是选择了$.ajax,因为它实现了我想要的功能。


-1
我曾经遇到这样一个情况,我使用jQuery来禁用所有输入框(包括我想要的隐藏输入框),然后再使用jQuery提交表单。我将jQuery更改为仅禁用“button”类型的输入框,现在当提交表单时,隐藏变量也会被提交!似乎如果您将隐藏输入框设置为禁用,则其值不会随表单一起提交!

更改为:

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

转到:

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

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接