【问题标题】:.serialize does not pass parameters correctly.serialize 没有正确传递参数
【发布时间】:2014-02-05 15:44:48
【问题描述】:

我正在向控制器 PHP 发送带有 $.post 的序列化表单:

$.post('/Controller.php',
    {
        action: 'register',
      data: $('#regForm').serialize()                       
    },
  function(msg){

        if(parseInt(msg.status)==1)
        {
            window.location=msg.txt;
        }
        else if(parseInt(msg.status)==0)
        {
            error(1,msg.txt);
        }

        hideshow('loading',0);
    }, 
    "json"      
);  

我现在希望能够通过 $_POST['fieldname'] 访问表单字段 但反而 我在 $_POST['data'] 中有一个 Get like 参数字符串 -.- 我做错了什么?

【问题讨论】:

    标签: php jquery


    【解决方案1】:

    它正在按照您告诉它的方式发送数据。 .serialize() 创建一个“查询字符串”,您将其添加到 $_POST['data']

    试试这个:

    var formData = $('#regForm').serialize();
    var extraFields = {action: 'register'};
    
    $.post('/Controller.php', $.param(extraFields)+'&'+formData, function(msg){
        if(parseInt(msg.status)==1)
        {
            window.location=msg.txt;
        }
        else if(parseInt(msg.status)==0)
        {
            error(1,msg.txt);
        }
    
        hideshow('loading',0);
    }, 'json');
    

    现在您应该可以得到$_POST['action']$_POST['fieldname']

    【讨论】:

    • 这正是我所需要的。谢谢!
    【解决方案2】:

    $.post 格式是这样的:

    jQuery.post( url [, data ] [, success(data, textStatus, jqXHR) ] [, dataType ] )
    

    所以你的第一个参数是正确的,第二个是数据。这就是为什么您将 $_POST['data'] 和 $_POST['action'] 作为发布参数的原因,因为您确实发送了两个 url 参数“action”和“data”。您可以这样做并直接将表单作为数据发送:

    $.post('/Controller.php',
           $('#regForm').serialize(),
      function(msg){
    
            if(parseInt(msg.status)==1)
            {
                window.location=msg.txt;
            }
            else if(parseInt(msg.status)==0)
            {
                error(1,msg.txt);
            }
    
            hideshow('loading',0);
        }, 
        "json"      
    );  
    

    然后你会得到你想要的,$_POST['fieldname']

    【讨论】:

    • 我认为他也需要 $_POST['action'] 值。
    • 在这种情况下,您的答案更完整。
    【解决方案3】:

    确保表单中的输入字段分配有name 属性,否则jQuery 将无法正确发送数据。

    另一个选项是使用serializeArray。两者的区别has been discussed here.

    $.post('/Controller.php',
        {
            action: 'register',
          data: $('#regForm').serializeArray()                       
        },
      function(msg){
            if(parseInt(msg.status)==1)
            {
                window.location=msg.txt;
            }
            else if(parseInt(msg.status)==0)
            {
                error(1,msg.txt);
            }
    
            hideshow('loading',0);
        }      
    )
    

    【讨论】:

    • 这不会像您期望的那样工作。在 PHP 中,您将获得 $_POST['data'][0]['name']$_POST['data'][0]['value']。您可能想要执行以下操作:var data = $('#regForm').serializeArray(); data.push({name:'action',value:'register'}); $.post('/Controller.php', data, function(){});.
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-07-19
    • 2021-09-03
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多