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 空数组的主要内容,如果未能解决你的问题,请参考以下文章