JS POST问题,太诡异了,脑阔疼。
本帖最后由 cqwcns 于 2020-1-6 12:27 编辑我的DEMO是这样的:
<!doctype html>
<html>
<head>
<meta charset="utf-8">
<title>无标题文档</title>
<script src="assets/js/core/jquery.3.2.1.min.js"></script>
</head>
<body>
<script type="application/javascript">
function funGetChartDefaultStyle() {
return {
type: 'pie',
toolbox: {
show: false,
feature: {
dataView: {
show: true,
readOnly: true
},
saveAsImage: {
show: true
}
}
},
legend: {},
series: [{
name: '标题',
type: 'pie',
radius: ['0%', '70%'],
avoidLabelOverlap: false,
label: {},
labelLine: {}
}],
dataset: {
source: ''
}
};
};
let arrTemp=funGetChartDefaultStyle();
arrTemp.series.radius=['20%', '90%'];
console.log(arrTemp);
$.post('/php/changeChartPage.php', {
vVal: JSON.stringify(arrTemp),
});
</script>
</body>
</html>
先生产一个对象,修改他,在控制台上输出,可见修改成功:
【此处剪刀手】
然后我POST数据,诡异的事情就发生了:
【此处黑人问号脸】
为什么会这样?!?!?请指教。
应该是JS POST异步执行的问题 你标记的两个数据不是一个维度的
series的对象类型是一个数组
你的赋值语句却是操作的series整个对象而不是其中的某个元素
后面序列化的时候就有问题了具体不是很清楚原理
按照你的需求来看你应该这么写
arrTemp.series.radius=['20%', '90%']; 浅复制深复制? ajax异步调用,var的时候不会等你返回的。设置为同步试试吧。 更诡异!更诡异的事,我忘记说了。
如果修改参数时,同时加一个arrTemp.type='line',修改type属性为'line',竟然POST时是'line',而不是原来的Pie。
你们试试,帮帮我解决这个问题,谢谢。
cqwcns 发表于 2020-1-6 10:34
更诡异!更诡异的事,我忘记说了。
如果修改参数时,同时加一个arrTemp.type='line',修改type属性为'li ...
js很多东西都是异步的,你要先搞清楚js的异步就不会觉得诡异了 本帖最后由 15774211127 于 2020-1-6 10:50 编辑
cqwcns 发表于 2020-1-6 10:34
更诡异!更诡异的事,我忘记说了。
如果修改参数时,同时加一个arrTemp.type='line',修改type属性为'li ...
诡异个鸡儿,
你执行
arrTemp.type='line'
post时type当然是line了,
你前面的问题是series是数组,而你使用
arrTemp.series.radius=['20%', '90%'];
去修改,当然不对了,
你这相当于给series添加了个属性,对于json,来说series是个数组,里面的属性当然无法表示出来啊,
而你看到的修改了是因为js中时是将它 表现为对象,不信你点开console.log()时看到的series下面的0属性看看是改每改
正确写法是
arrTemp.series.radius=['20%', '90%'];
15774211127 发表于 2020-1-6 10:46
诡异个鸡儿,
你执行
arrTemp.type='line'
终于有个明白人了。 本帖最后由 wei125483 于 2020-1-6 11:19 编辑
arrTemp.series=[{
name: '标题',
type: 'pie',
radius: ['20%', '90%'],
avoidLabelOverlap: false,
label: {},
labelLine: {}
}];
var params = JSON.stringify(arrTemp)
console.log(params);
页:
[1]
2