[英]how to pass array of javascript objects to php?
我有一堆需要传递给服务器的值,而且似乎无法使JSON解码等基本功能正常工作。 这里有些事,我会很感激有人看的
我有一个动态生成的表,该表具有可编辑的值,当用户单击“添加”按钮时,该表会被捕获,将其压入数组,然后通过ajax调用发送到服务器。 这是从console.log(data)复制过来的示例数据。 线。
var data = params + "&Details="+JSON.stringify(Details);
console.log(data); // &Id[]=1566&aId[]=1567&Details=[["1566","First File","sdf.pdf","general","file","",""],["1567","2nd file","test.png","image","file","",""]]
$.ajax({
type: 'POST',
url: editUrl,
dataType: 'json',
data: data,
success: function() { console.log('success'); }
error: function() { console.log('error'); }
});
在服务器端,我得到了数据,但无法将其解析为可用格式
$ids = ($_POST['Id']); // this is a valid array
$details = ($_POST['Details']); // [[ 1566 , First File , , general , file , , ],[ 1567 , 2nd file , , image , file , , ]]
$details = json_decode($details); // getting JSON_ERROR_CTRL_CHAR error and null is returned
知道这里有什么问题吗?
您需要正确编码JSON:
var data = params + "&Details="+encodeURIComponent(JSON.stringify(Details));
但是,恕我直言,使data
成为对象而不是字符串会更好。
var data = {
Id: [ 1566, 1567],
Details: JSON.stringify(Details)
};
您将需要更改创建params
以便它也可以生成对象。 然后,您可以使用$.extend()
合并它们:
var data = $.extend({}, params, { Details: JSON.stringify(Details) });
您的ajax参数在成功函数后缺少comma
,并尝试将服务器的成功函数回调定义为数据,然后将json_encode用于php服务器中的数组数据。
$.ajax({
type: 'POST',
url: editUrl,
dataType: 'json',
data: data,
success: function(data) { console.log(data); },
error: function() { console.log('error'); }
});
不确定如何构建params变量或为什么。 但是,如果只是通过ajax发送,则不必这样做。 ajax的data参数将为您完成此操作。 给它一个带有您要发送的名称/值对的对象。
$.ajax({
type: 'POST',
url: editUrl,
dataType: 'json',
data: {
Id: [2566],
aId: [1567],
Details: Details,
Other: 'Hi',
AnotherId: 1234
}
success: function() { console.log('success'); }
error: function() { console.log('error'); }
});
在服务器上,查看所有$ _POST变量,以了解发送的内容和格式
<?php
echo '<pre>'
print_r($_POST);
?>
尝试json_decode(stripslashes($details))
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.