2015-10-15 37 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); 
?> 
相關問題