【问题标题】:jquery $.post empty arrayjquery $.post 空数组
【发布时间】: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/

这是一条明智的路线吗?

【问题讨论】:

    标签: php jquery ajax post


    【解决方案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);
        

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 2017-03-23
          • 1970-01-01
          • 2011-07-19
          • 1970-01-01
          • 1970-01-01
          • 2018-02-17
          • 2013-04-27
          • 2017-12-01
          相关资源
          最近更新 更多