2015-10-15 74 views
3

标题基本上说明了一切。用jQuery ajax发送到服务器的formData对象成功返回空数组

我正在收集一些数据并将其附加到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中必须是正确的。

更新的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文件只包含的$_POST

<?php 
    print_r($_POST); 
?> 

一个print_r这是AJAX的就是我成功的功能通话记录:

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

在控制台检查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); 
     } 
    }); 

------------------------ update -------------- --------

你也可以这样做,但在我猜测的服务器大小上解码会有点棘手。

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

您的updateObj必须已更改或obj格式不正确。 – Minato

0

与参数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); 
      } 
     }); 
    }); 

响应并在服务器端

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

+0

试了一下。该回声的结果仍然是空的。 –

+0

你可以在这里粘贴updateObj –

+0

的内容或它是如何生成的? –

0

在阿贾克斯尝试这个 - 呼叫 -

$.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 
    echo json_encode($_POST,true); 
?>