将序列化的jquery数据传递给php,我做错了什么?

将序列化的jquery数据传递给php,我做错了什么?,php,jquery,ajax,serialization,Php,Jquery,Ajax,Serialization,我目前有一个带有输入和名称属性的表单 我能够通过jquery获得我所需要的: var inputValues= $('.myForm').serialize(); 如果我alert(inputValues),我就会得到我所需要的(比如表单get变量:categories=examplevalue&name=examplename&email=exampleemail) 现在,我正试图通过ajax将其传递给PHP,就像这样(ajax.js) 在我的PHP中,我有: if(isset($_POS

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

我能够通过jquery获得我所需要的:

 var inputValues= $('.myForm').serialize();
如果我
alert(inputValues)
,我就会得到我所需要的(比如表单get变量:
categories=examplevalue&name=examplename&email=exampleemail

现在,我正试图通过ajax将其传递给PHP,就像这样(ajax.js

在我的PHP中,我有:

if(isset($_POST['inputs'])){
   echo $_POST['inputs'];
}
我假设它会根据我的表单发出一堆变量的警报,但它只会发出名为
categories

我做错了什么

谢谢两件事:

  • 数据分配:

    $.ajax({
            url: "myfile.php",
            type: "POST",
            data:  $('.myForm').serialize()
    
    }).done(function(data){
            alert(data);
    });
    
    用输入作为字段名的前缀。像
    变成

  • 在php中显示数组:

    if(isset($_POST['inputs'])){
       var_dump($_POST['inputs']);
    } 
    
    echo
    如果不是标量值,则只打印
    Array

  • 更新 如果Lior Cohen是对的,并且您的服务器无法识别字段名称符号(默认php设置不是这样),那么您可以使用以下简单的解决方法:

    parse_str(file_get_contents("php://input"), $POST);
    
    然后使用
    $POST
    而不是
    $\u POST
    。请注意,
    $POST
    不会是超全局的。

    有两件事:

  • 数据分配:

    $.ajax({
            url: "myfile.php",
            type: "POST",
            data:  $('.myForm').serialize()
    
    }).done(function(data){
            alert(data);
    });
    
    用输入作为字段名的前缀。像
    变成

  • 在php中显示数组:

    if(isset($_POST['inputs'])){
       var_dump($_POST['inputs']);
    } 
    
    echo
    如果不是标量值,则只打印
    Array

  • 更新 如果Lior Cohen是对的,并且您的服务器无法识别字段名称符号(默认php设置不是这样),那么您可以使用以下简单的解决方法:

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

    然后使用
    $POST
    而不是
    $\u POST
    。请注意,
    $POST
    不会是超全局的。

    只需查看发送到PHP的内容。。。如果将“inputvalues=”与serialzied表单连接起来,则会向PHP发送以下内容:

    inputs=categories=examplevalue&name=examplename&email=exampleemail
    
    所以,是的。。。这会让人感到困惑。:)

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

    data:inputValues
    
    你需要在邮件上更改你的接受条件


    您还可以将数据序列化为JSON并对其进行反序列化,但这应该可以让您开始了。

    只需查看发送到PHP的内容。。。如果将“inputvalues=”与serialzied表单连接起来,则会向PHP发送以下内容:

    inputs=categories=examplevalue&name=examplename&email=exampleemail
    
    所以,是的。。。这会让人感到困惑。:)

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

    data:inputValues
    
    你需要在邮件上更改你的接受条件


    您还可以将数据序列化为JSON并反序列化,但这应该可以让您开始了。

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

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

    我没有测试这段代码,但我认为它是有效的

        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);
    }
    
    serialize()

    $.ajax
    调用中,删除
    输入=
    ,只需单独使用
    输入值即可。这将允许您使用
    $\u POST['myvar']

    serialize()
    生成无法分配给单个参数的查询字符串(
    foo=bar&baz=yikes

    $.ajax
    调用中,删除
    输入=
    ,只需单独使用
    输入值即可。这将允许您使用
    $\u POST['myvar']

    获取表单中的单个变量。请查看以下内容:

    很抱歉,我将在计算机上修复格式设置

     (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);
    
    看看这个:

    很抱歉,我将在计算机上修复格式设置

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

    此方法并不总是有效(取决于所使用的web服务器、PHP设置等)。如果您计划使用此功能,请在您的预期环境中进行彻底测试。var_dump($\u POST['inputs'])无法正常工作,因为表单应包含of或textarea或…@hamidreza66 var_dump会对
    php
    中可用的(几乎)任何数据类型进行大量报告。你说它不能正常工作是什么意思?如果我的表单中有一个select元素,如果(isset($\u POST['inputs']){…}没有返回select值,即使你应该检查输入,而不是inputs@hamidreza66
    将在提交时设置
    $\u POST['inputs']
    。因此,
    isset
    将返回true。问题出在哪里?此方法并不总是有效(取决于所使用的web服务器、PHP设置等)。如果您计划使用此功能,请在您的预期环境中进行彻底测试。var_dump($\u POST['inputs'])无法正常工作,因为表单应包含of或textarea或…@hamidreza66 var_dump会对
    php
    中可用的(几乎)任何数据类型进行大量报告。你说它不能正常工作是什么意思?如果我的表单中有一个select元素,如果(isset($\u POST['inputs']){…}没有返回select值,即使你应该检查输入,而不是inputs@hamidreza66
    将在提交时设置
    $\u POST['inputs']
    。因此,
    isset
    将返回true。问题出在哪里?我想这就是帮助我解决问题的原因,我知道我现在如何度过难关。谢谢,我想这就是帮助我摆脱困境的原因,我知道我现在该如何度过难关了。谢谢