jquery $.post 空数组

Posted

技术标签:

【中文标题】jquery $.post 空数组【英文标题】:jquery $.post empty array 【发布时间】:2010-09-21 05:25:27 【问题描述】:

我正在使用 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/

这是一条明智的路线吗?

【问题讨论】:

【参考方案1】:

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

你可以试试这个:

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

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

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

【讨论】:

【参考方案2】:

我被同样的问题所困扰,我发现欧文给出的解决方案不合适。你自己序列化对象,而 jQuery 应该为你做。在这种情况下,您不妨执行 $.get()。

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

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

【讨论】:

这样一件随机的事情让我如此焦虑......感谢您的评论! 你太棒了。【参考方案3】:
application/x-www-form-urlencoded

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

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

$arguments = $_REQUEST + $_FILES;

【讨论】:

这对我来说并不重要。 POST 和 REQUEST 不起作用。我不确定问题是什么,但序列化(上图)似乎有效,我只是改用 $.get。【参考方案4】:

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

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

我最终还是选择了 $.ajax,因为它满足了我的要求。

【讨论】:

【参考方案5】:

在使用 jQuery 提交表单之前,我曾使用 jQuery 禁用所有输入(甚至是我想要的隐藏输入)。我将 jQuery 更改为仅禁用“按钮”类型的输入,现在在提交表单时会发布隐藏的变量!似乎如果您将隐藏输入设置为禁用,则其值不会随表单一起发布!

改变:

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

到:

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

【讨论】:

以上是关于jquery $.post 空数组的主要内容,如果未能解决你的问题,请参考以下文章

获取空对象数组jquery post

jquery ajax后混合数组对象将空数组发送到php

JQuery ajax - 如何传递具有空值的数组参数

使用 $.ajax 时在 PHP 中获取空数组 [重复]

jquery 向空数组中添加元素,重复的就不添加到空数组中请问该如何编写

Angularjs $http POST 请求空数组