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);
?>

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

我无法弄清楚为什么$_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/

那是一条明智的路线吗?

4

5 回答 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

于 2008-11-07T02:46:12.540 回答
4

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

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

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

于 2009-04-30T14:15:43.217 回答
1
application/x-www-form-urlencoded

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

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

$arguments = $_REQUEST + $_FILES;

于 2008-11-07T02:32:59.930 回答
0

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

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

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

于 2010-04-06T18:47:37.063 回答
-1

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

改变:

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

到:

$('input[type=button]').attr('disabled',true);
于 2011-09-14T08:18:54.707 回答