【问题标题】:passing serialized jquery data to php, what am i doing wrong?将序列化的 jquery 数据传递给 php,我做错了什么?
【发布时间】:2012-06-30 06:21:07
【问题描述】:

我目前有一个带有输入和名称属性的表单。

我可以通过 jquery 得到我需要的东西:

 var inputValues= $('.myForm').serialize();

如果我alert(inputValues),我得到了我需要的东西,(比如表单 GET 变量:categories=examplevalue&name=examplename&email=exampleemail

现在,我正在尝试使用 ajax 将其传递给 PHP,就像这样 (ajax.js)

            $.ajax({
                url: "myfile.php",
                type: "POST",
                data: "inputs="+inputValues
            }).done(function(data){
                alert(data);
            });

在我的 PHP 我有这个:

if(isset($_POST['inputs'])){
   echo $_POST['inputs'];
}

我假设它会根据我的表单提醒一堆变量,但它只会回显第一个名字变量,即categories

我在这里做错了什么?

谢谢

【问题讨论】:

    标签: php jquery ajax serialization


    【解决方案1】:

    两件事:

    1. 数据分配:

      $.ajax({
              url: "myfile.php",
              type: "POST",
              data:  $('.myForm').serialize()
      
      }).done(function(data){
              alert(data);
      });
      

      在字段名称前加上 with 输入。比如<input name="x"/> 变成了<input name="inputs[x]"/>

    2. 在 php 中显示数组:

      if(isset($_POST['inputs'])){
         var_dump($_POST['inputs']);
      } 
      

      echo 不是标量值时只会打印Array)。

    更新

    如果 Lior Cohen 是对的,并且您的服务器无法识别字段名称表示法(默认 php 设置不是这种情况),那么您可以使用这个简单的解决方法:

    parse_str(file_get_contents("php://input"), $POST);
    

    然后使用$POST 而不是$_POST。请注意,$POST 不会是超级全球性的。

    【讨论】:

    • 此方法并不总是有效(取决于所使用的 Web 服务器、PHP 设置等)。如果您打算使用它,请在您的预期环境中进行彻底测试。
    • var_dump($_POST['inputs']) 不能正常工作,因为表单应该包含
    • @hamidreza66 var_dump 对(几乎)php 中可用的任何数据类型进行了广泛的报告。你的意思是它不能正常工作?
    • 如果我的表单中有一个选择元素, if(isset($_POST['inputs'])){...} 不会返回选择值,即使您应该检查输入,而不是输入
    • @hamidreza66 <select name="inputs[selectVal]">...</select> 将在提交时设置$_POST['inputs']。因此isset 将返回 true。问题出在哪里?
    【解决方案2】:

    serialize() 生成查询字符串 (foo=bar&baz=yikes) 格式,该格式不能分配给单个参数(在您的情况下为 inputs=...)。

    在您的$.ajax 调用中,删除inputs= 并仅使用inputValues。这将允许您使用 $_POST['myvar'] 获取表单中的各个变量。

    【讨论】:

    • 我认为这对我有帮助,我知道我现在如何通过它。谢谢
    【解决方案3】:

    看看这个:http://jquery.webspirited.com/2011/02/jquery-serializepost/

    关于格式化的问题,我会在电脑上修复

     (function($) {
    
            $.fn.serializePost = function() {
    
    var data = {};
    
    var formData = this.serializeArray();
    
    for (var i = formData.length; i--;) {
    
    var name = formData[i].name;
    
    var value = formData[i].value;
    
    var index = name.indexOf('[]');
    
    if (index > -1) {
    
    name = name.substring(0, index);
    
    if (!(name in data)) {
    
    data[name] = [];
    
    }
    
    data[name].push(value);
    
    }
    
    else
    
    data[name] = value;
    
    }
    
    return data;
    
    };
    
    })(jQuery);
    

    【讨论】:

      【解决方案4】:

      看看你发送给 PHP 的内容......如果你将 'inputvalues=' 与序列化的表单连接起来,你最终会将以下内容发送给 PHP:

      inputs=categories=examplevalue&name=examplename&email=exampleemail
      

      所以,是的……它会很混乱。 :)

      相反,只需在 jQuery 中执行此操作:

      data:inputValues
      

      您需要更改帖子中的接受条件。

      您还可以将数据序列化为 JSON 并对其进行反序列化,但这应该可以帮助您入门。

      【讨论】:

        【解决方案5】:

        我没有测试过这段代码,但我认为它可以工作

            var inputValues= $('.myForm').serialize();
            $.ajax({
                url: "myfile.php",
                type: "POST",
                data: inputValues,
                success: function(data){
                    alert(data);
                    // or use: console.log(data); /*you need firebug to log*/
                }
            });
        

        //和php

        if(isset($_POST)){
           var_dump($_POST);
        }
        

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 2014-08-20
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 2013-12-03
          • 1970-01-01
          • 1970-01-01
          • 2011-11-03
          相关资源
          最近更新 更多