使用jQuery ajax发送给服务器的formData对象成功后返回空数组
formData object sent with jQuery ajax to server returns empty array on success
标题基本说明了一切。
我正在收集一些数据并将其附加到formData对象中,以便将其POST到我的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文件只包含$_POST
中的print_r
<?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();
问题是你正在尝试发送一个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);
}
});
试试这个-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);
?>
如果您想获得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['数据'],美元数据),
回声json_encode(元数据);退出;
相关文章:
- 上传PDF's使用Dropzone.js&拉拉维尔.有些上传成功,另一些则返回一个空对象
- 如何获取 Ember 组件对象内部承诺成功或错误回调
- 成功填充 xmlhttprequest 的 Json 对象突然变为“null”
- Jquery UI:如何指示可拖动对象成功拖放到可排序对象上
- 在 ajax 中使用 json 对象成功函数(使用 angular.js)
- jQuery 控件的 AJAX 文本属性成功,返回 [对象对象]
- Javascript - 如何访问成功块之外的对象
- 如何从 jQuery.ajax 成功语句推送父对象
- jQuery:在成功/错误中使用延迟对象(ajaxSetup 选项)
- AJAX 成功对象中未捕获的类型错误
- 当响应 JSON 对象数据计数为零时,AJAX 成功回调函数重定向到错误回调
- 如何将jquery的这个对象传递给内部成功函数
- 等待ultil-ajax.html成功加载对象
- 在Phonegap中加载[对象文档]的AJAX成功数据
- 如何让promise对象成功函数中的代码在调用后的代码之前执行
- ajax成功操作后出现对象引用错误-jquery
- 分析对象未成功编辑
- 使用ajax从同一个javascript函数多次调用,对象在函数体和ajax成功回调之间的参数不相同
- AJAX成功获取了某个值的对象
- 对未引用对象的jQueryajax成功回调会发生什么