PHP没有获得JQuery serialize()POST参数

时间:2015-07-29 14:18:38

标签: php jquery ajax serialization

我想发送一个带有JQuery $.ajax的表单,但我遇到了问题。似乎PHP无法序列化$_POST。这很奇怪,因为变量elementiPost不是空的,实际上如果我console.log(parametriPost),控制台会向我显示正确的内容。 最奇怪的是PHP获取的参数我手动附加到parametriPost ($_POST['data_r'])而不是$(this).serialize()的参数! 如果我在$ ore中手动输入一个数字,它可以正常工作,所以问题不在于查询。

谢谢。

以下是代码:

JQuery的

$('form').submit(function(e) {

                e.preventDefault();

                var formId = $(this).attr('id');
                var data = area_get_row_date(formId);

                var parametriPost = $(this).serialize() + '&data_r=' + data;


                $.ajax({                                      
                    url: 'insert_db.php',                  
                    method: 'POST',
                    async: false,
                    data: parametriPost,
                    success: function() {

                         // Success code
                    },
                    error: function(xhr, status, error) {
                        alert("Errore!");
                    }
                });
            });

PHP(insert_db.php)

$data = str_replace('_', '.', $_POST['data_r']);
$ore = $_POST['orelavorateore_2_07_2015'];

    $sql = "INSERT INTO ore_lav
            VALUES (NULL, 134, 4,STR_TO_DATE('" . $data . "', '%d.%m.%Y'), " . $ore . ", 1, 1)";


    $results = api_store_result(api_mysql_query($sql));

这是parametriPost包含的内容:

lavorati_prenotati=L&periodointegrazione_3_07_2015=on&orelavoratechf_3_07_2015=&orelavorateore_3_07_2015=a&extra_field1_orelavoratechf_3_07_2015=&extra_field1_orelavorateore_3_07_2015=&extra_field2_orelavoratechf_3_07_2015=&extra_field2_orelavorateore_3_07_2015=&orenonlavoratechf_3_07_2015=&orenonlavorateore_3_07_2015=&orenonlavoratetipologia_3_07_2015=L&extra_field1_orenonlavoratechf_3_07_2015=&extra_field1_orenonlavorateore_3_07_2015=&extra_field1_orenonlavoratetipologia_3_07_2015=L&extra_field2_orenonlavoratechf_3_07_2015=&extra_field2_orenonlavorateore_3_07_2015=&extra_field2_orenonlavoratetipologia_3_07_2015=L&orenonpagateore_3_07_2015=&orenonpagatetipologia_3_07_2015=L&extra_field1_orenonpagateore_3_07_2015=&extra_field1_orenonpagatetipologia_3_07_2015=L&extra_field2_orenonpagateore_3_07_2015=&extra_field2_orenonpagatetipologia_3_07_2015=L&orelavoratechf_3_07_2015=&orelavorateore_3_07_2015=&data_r=3_07_2015

1 个答案:

答案 0 :(得分:0)

您可以使用此代码段将表单数据转换为JSON格式:

sr(..., multi = True)

并在PHP方面:

$.fn.serializeObject = function()
    {
       var o = {};
       var a = this.serializeArray();
       $.each(a, function() {
           if (o[this.name]) {
               if (!o[this.name].push) {
                   o[this.name] = [o[this.name]];
               }
               o[this.name].push(this.value || '');
           } else {
               o[this.name] = this.value || '';
           }
       });
       return o;
    };

    $("form").submit(function( event ) {

        event.preventDefault();

        //convert form data to JSON
        var params = $(this).serializeObject();
        //add a 'data_r' field with some data to our JSON
        params.data_r = 'sample data';

        $.ajax({
            url: 'app.php',
            type: 'POST',
            data: JSON.stringify(params),
        })
        .done(function(data) {
            console.log(data);
        });
    });

现在 $ data 是一个对象,您可以访问特定字段:

<?php 

    $data = json_decode(file_get_contents('php://input'), false);

    print_r($data->data_r);


 ?>