cqwcns 发表于 2020-1-6 09:44

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数据,诡异的事情就发生了:

【此处黑人问号脸】


为什么会这样?!?!?请指教。

kof21411 发表于 2020-1-6 09:53

应该是JS POST异步执行的问题

堕落ぁ狼 发表于 2020-1-6 09:59

你标记的两个数据不是一个维度的

series的对象类型是一个数组

你的赋值语句却是操作的series整个对象而不是其中的某个元素

后面序列化的时候就有问题了具体不是很清楚原理

按照你的需求来看你应该这么写

arrTemp.series.radius=['20%', '90%'];

_知鱼之乐 发表于 2020-1-6 10:00

浅复制深复制?

zyl5664 发表于 2020-1-6 10:05

ajax异步调用,var的时候不会等你返回的。设置为同步试试吧。

cqwcns 发表于 2020-1-6 10:34

更诡异!更诡异的事,我忘记说了。

如果修改参数时,同时加一个arrTemp.type='line',修改type属性为'line',竟然POST时是'line',而不是原来的Pie。

你们试试,帮帮我解决这个问题,谢谢。

1032740078 发表于 2020-1-6 10:45

cqwcns 发表于 2020-1-6 10:34
更诡异!更诡异的事,我忘记说了。

如果修改参数时,同时加一个arrTemp.type='line',修改type属性为'li ...

js很多东西都是异步的,你要先搞清楚js的异步就不会觉得诡异了

15774211127 发表于 2020-1-6 10:46

本帖最后由 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%'];


goldli 发表于 2020-1-6 11:04

15774211127 发表于 2020-1-6 10:46
诡异个鸡儿,
你执行
arrTemp.type='line'


终于有个明白人了。

wei125483 发表于 2020-1-6 11:11

本帖最后由 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
查看完整版本: JS POST问题,太诡异了,脑阔疼。