2008-11-07 61 views
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/

是一个明智的路线走?

回答

14

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

你可以试试这个:

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

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

serialize()通话将抢在form.myForm当前所有的数据。

+0

doh,那工作,谢谢,我可以得到的价值.. – Neil 2008-11-07 03:02:40

+0

没问题,很高兴你得到它的工作:) – Owen 2008-11-07 03:19:25

1
application/x-www-form-urlencoded 

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

如果你希望将接收文件上传,比你想创建一个新的阵列,包括$ _FILES,以及内容:

$参数= $ _REQUEST + $ _FILES;

+0

这并没有为我无所谓。 POST和REQUEST不起作用。我不是积极的问题,但序列化(上面)似乎工作,我只是切换到$ .get。 – Jake 2012-05-29 14:22:50

4

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

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

这是在本地机器上,所以我无法检查HTTP通信。如果我愿意的话,我早就会发现。

0

我试着从欧文给出的函数,但也得到了一个空白的警报。奇怪,但我注意到它会输出一个查询字符串并返回一个空白的警报。然后我再次提交,它会提醒正确的帖子值。

也有使用id属性在html中设置的字段名称(这是我在跟踪的jQuery教程中是如何完成的)。这不允许我的表单字段序列化。当我将id换成名字时,它解决了我的问题。

我最终以$ .ajax去,因为它做了我想要的。

-1

我有一个案例,在使用jQuery提交表单之前,我正在使用jQuery禁用所有输入(即使是我想要的隐藏的输入)。我改变了我的jQuery只禁用“按钮”类型的输入,现在隐藏的变量在表单提交时发布!看起来,如果你设置一个隐藏的输入来禁用它的值不会与表单一起发布!

更改:

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

到:

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