2015-10-15 1 views
3

название в основном говорит все.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 POST.

Update Содержание 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); 
?> 

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

success: Array 
(
) 

UPDATE2

Это как мой 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(); 
+0

перед вызовом ajax у вас есть 'console.log()'. является то, что дает ожидаемый результат? –

+0

Да console.log дает мне ожидаемый результат. –

+0

check in console для ajax-запроса –

ответ

2

Проблема в том, что вы пытаетесь отправить массив объектов 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); 
     } 
    }); 

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

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

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

---------- update2.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); 
     } 
    }); 
+0

и сохраните тот же код на стороне сервера – Minato

+0

Как ни странно, решение от вас больше не работает. Пустой ответ снова –

+0

ваше обновлениеObj должно быть изменено или obj не отформатирован должным образом. – Minato

0

Попробуйте с параметром JSON, если вы хотите получить ответ в формате JSON [Edit]

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

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

parse_str ($ _ POST ['data'], $ data);
echo json_encode ($ data); exit;

+0

Пробовал. Результат этого эха все еще пуст. –

+0

вы можете вставить updateObj здесь –

+0

содержание или как оно генерируется? –

0

Попробуйте this- на 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); 
?> 
Смежные вопросы