Объект FormData, отправленный с помощью jQuery ajax на сервер, возвращает пустой массив при успешном выполнении


Название в основном говорит само за себя.

Я собираю некоторые данные и добавляю их в объект FormData, чтобы ОПУБЛИКОВАТЬ их в своем PHP-файле и обработать все остальное там.

Моя функция Ajax:

save.addEventListener("click", function(e){
    e.preventDefault();
    getAllContents();
    console.log(updateObj);

    updateObj = JSON.stringify(updateObj);
    console.log(updateObj);

    $.ajax({
        url: "test.php",
        type: "POST",
        data: updateObj,
        success: function(response){
            console.log("Success: ", response);
        },
        error: function(response){
            console.log("Error: ", response);
        }
    });
});

updateObj содержит все, что я добавил к объекту FormData. Журнал консоли этой переменной возвращает все. Таким образом, проблема должна быть прямо в сообщении ajax.

Обновление Содержимое файла console.log (updateobj) :

[{"row_id":1,"status":"Anmeldung","ma_name":"AA","datum":"/","fa1":"testname1","fa2":"testname2","limit":"10.000","gruppe_kredit":"/","omv_kdnr":"8124213","sap_kdnr":"/","fos":"/","hga_kdnr":"/"},{"row_id":3,"status":"Anmeldung","ma_name":"AA","datum":"/","fa1":"ame1","fa2":"name2","limit":"12.000","gruppe_kredit":"/","omv_kdnr":"81515616","sap_kdnr":"/","fos":"/","hga_kdnr":"/"},{"row_id":2,"status":"Kunde","ma_name":"AA","datum":"/","fa1":"newname1","fa2":"newname2","limit":"15.323","gruppe_kredit":"/","omv_kdnr":"81515616","sap_kdnr":"/","fos":"/","hga_kdnr":"/"}]

Мой PHP-файл содержит только print_r $_POST

<?php 
   print_r($_POST);
?>

Вот что означает моя функция успеха в журналах вызовов ajax:

success:  Array
(
)

ОБНОВЛЕНИЕ 2

Вот как заполняется мой объект FormData:

// console.log($test.length);
var updateObj = [];

function getAllContents(){
    var $tableTr = $('tbody tr');
    updateObj = [];

    $tableTr.each(function(index, element){
        var $row_id = $(this).data("rowid");
        // console.log("ID in Table: " + $row_id);
        var status = $(this).find('#status option:selected').val();
        // console.log("ID "+$row_id+" in der Table hat den Status: "+status);
        var ma_name = $(this).find('#ma-name').val();
        // console.log(ma_name);
        var datum = $(this).find('#datum').val();
        // console.log(datum);
        var firmenname1 = $(this).find('#firmenname1').val();
        // console.log(firmenname1);
        var firmenname2 = $(this).find('#firmenname2').val();
        // console.log(firmenname2);
        var limit = $(this).find('#limit').val();
        // console.log(limit);
        var gruppe_kredit = $(this).find('#gruppe_kredit').val();
        // console.log(gruppe_kredit);
        var omv_kdnr = $(this).find('#omv_kdnr').val();
        // console.log(omv_kdnr);
        var sap_kdnr = $(this).find('#sap_kdnr').val();
        // console.log(sap_kdnr);
        var fos = $(this).find('#fos').val();
        // console.log(fos);
        var hga_kdnr = $(this).find('#fos').val();
        // console.log(hga_kdnr);

        var pushObj = {
                        row_id: $row_id,
                        status: status,
                        ma_name: ma_name,
                        datum: datum,
                        fa1: firmenname1,
                        fa2: firmenname2,
                        limit: limit,
                        gruppe_kredit: gruppe_kredit,
                        omv_kdnr: omv_kdnr,
                        sap_kdnr: sap_kdnr,
                        fos: fos,
                        hga_kdnr: hga_kdnr
                    };

        updateObj.push(pushObj);
        // PushObjekt mit Inhalt befüllen und das PushObjekt ins updateObjekt einbetten

        //console.log(updateObj);
    });
}

 getAllContents();
Author: noa-dev, 2015-10-15

3 answers

Проблема в том, что вы пытаетесь отправить массив объектов JS. в этом случае обычный JSON.stringify(obj) не будет работать, так как на отдельных объектах нет ключей, поэтому объект не будет правильно закодирован в строку, поэтому на стороне сервера он не будет правильно проанализирован и не будет передан $_POST. Одним из решений может быть

updateObj = [{"row_id":1,"status":"Anmeldung","ma_name":"AA","datum":"/","fa1":"testname1","fa2":"testname2","limit":"10.000","gruppe_kredit":"/","omv_kdnr":"8124213","sap_kdnr":"/","fos":"/","hga_kdnr":"/"},{"row_id":3,"status":"Anmeldung","ma_name":"AA","datum":"/","fa1":"ame1","fa2":"name2","limit":"12.000","gruppe_kredit":"/","omv_kdnr":"81515616","sap_kdnr":"/","fos":"/","hga_kdnr":"/"},{"row_id":2,"status":"Kunde","ma_name":"AA","datum":"/","fa1":"newname1","fa2":"newname2","limit":"15.323","gruppe_kredit":"/","omv_kdnr":"81515616","sap_kdnr":"/","fos":"/","hga_kdnr":"/"}];
        // window.updateObj =
    console.log(updateObj);
    Obj = {};
    $.each(updateObj,function(x,obj){ Obj[""+x] = obj;});
    // updateObj = JSON.stringify(updateObj);
    updateObj = JSON.stringify(Obj);
    console.log(Obj);

$.ajax({
        url: "//localhost:80/test/",
        type: "POST",
        data: updateObj,
        success: function(response){
            console.log("Success: ", response);
        },
        error: function(response){
            console.log("Error: ", response);
        }
    });

------------------------ обновление----------------------

Вы также можете сделать это так, но будет немного сложно декодировать на сервере размером I догадываться.

updateObj = [{"row_id":1,"status":"Anmeldung","ma_name":"AA","datum":"/","fa1":"testname1","fa2":"testname2","limit":"10.000","gruppe_kredit":"/","omv_kdnr":"8124213","sap_kdnr":"/","fos":"/","hga_kdnr":"/"},{"row_id":3,"status":"Anmeldung","ma_name":"AA","datum":"/","fa1":"ame1","fa2":"name2","limit":"12.000","gruppe_kredit":"/","omv_kdnr":"81515616","sap_kdnr":"/","fos":"/","hga_kdnr":"/"},{"row_id":2,"status":"Kunde","ma_name":"AA","datum":"/","fa1":"newname1","fa2":"newname2","limit":"15.323","gruppe_kredit":"/","omv_kdnr":"81515616","sap_kdnr":"/","fos":"/","hga_kdnr":"/"}];
    console.log(updateObj);
    Obj = {};
    Obj["updateObj"] = updateObj;
    updateObj = JSON.stringify(Obj);
    $.ajax({
            url: "//localhost:80/test/",
            type: "POST",
            data: updateObj,
            success: function(response){
                console.log("Success: ", response);
            },
            error: function(response){
                console.log("Error: ", response);
            }
        });

---------- обновление 2.0

updateObj = [{"row_id":1,"status":"Anmeldung","ma_name":"AA","datum":"/","fa1":"testname1","fa2":"testname2","limit":"10.000","gruppe_kredit":"/","omv_kdnr":"8124213","sap_kdnr":"/","fos":"/","hga_kdnr":"/"},{"row_id":3,"status":"Anmeldung","ma_name":"AA","datum":"/","fa1":"ame1","fa2":"name2","limit":"12.000","gruppe_kredit":"/","omv_kdnr":"81515616","sap_kdnr":"/","fos":"/","hga_kdnr":"/"},{"row_id":2,"status":"Kunde","ma_name":"AA","datum":"/","fa1":"newname1","fa2":"newname2","limit":"15.323","gruppe_kredit":"/","omv_kdnr":"81515616","sap_kdnr":"/","fos":"/","hga_kdnr":"/"}];
        // window.updateObj =
    console.log(updateObj);
    Obj = {};


    var Obj = updateObj.reduce(function(o, v, i) {
       o[i] = v;
       return o;
    }, {});
    updateObj = JSON.stringify(Obj);
    console.log(Obj);

$.ajax({
        url: "//localhost:80/test/",
        type: "POST",
        data: updateObj,
        success: function(response){
            console.log("Success: ", response);
        },
        error: function(response){
            console.log("Error: ", response);
        }
    });
 2
Author: Minato, 2015-10-15 11:59:19

Попробуйте это - при вызове ajax -

   $.ajax({
            url: "test.php",
            type: "POST",
            dataType: "json",
            data: updateObj,
            success: function(response){
                console.log("Success: ", response);
            },
            error: function(response){
                console.log("Error: ", response);
            }

На Php

<?php 
   echo json_encode($_POST,true);
?>
 0
Author: Rohit Kumar, 2015-10-15 07:33:27

Попробуйте использовать параметр json, если вы хотите получить ответ в формате json [Редактировать]

save.addEventListener("click", function(e){
        e.preventDefault();
        getAllContents();
        console.log(updateObj);

        updateObj = JSON.stringify(updateObj);
        console.log(updateObj);

        $.ajax({
            url: "test.php",
            type: "POST",
            dataType: "json",
            data: ({data:updateObj}),
            success: function(response){
                console.log("Success: ", response);
            },
            error: function(response){
                console.log("Error: ", response);
            }
        });
    });

И на стороне сервера

Синтаксический Анализ_str($_POST['данные'],$данные);
echo json_encode($данные); выход;

 0
Author: Minesh Patel, 2015-10-15 08:25:34