zoukankan      html  css  js  c++  java
  • ajax传参使用json格式

    以往ajax请求的data我都是用一个paras来搞定的。

    代码:

    var paras = {};
                    paras.name='jack';
                    $.ajax({
                        type:'get',
                        url:'/testchart',
                        data:$.toJSON(paras),
                        dataType:'json',
                        contentType: 'application/json;charset=utf-8',
                        success: onDataReceived
                    });
    

      

      这样传到后台,直接获取paras =request.GET就能将整个paras获取到,然后使用paras['name']就能得到传过来的name。

     var paras = {};
                    paras.rows=[];
                    var rowstr={};
                    rowstr.property =null;
                    rowstr.filter =null;
                    rowstr.casted_type =null;
                    paras.rows.push(rowstr);
                    paras.bool_op ='or';
                    paras.arb_event ='Add Friend Receive';
                    paras.action='by';
                    paras.unit='day';
                    paras.type='general';
                    paras.limit = 40;
                    paras.chart_type= 'line';
                    paras.chart_keys=['Add Friend Request'];
                    paras.from_date = '2012-09-10';
                    paras.to_date = '2012-10-10';
                    paras.project ='pirates';
    
                    $.ajax({
                        type:'get',
                        url:'/testchart',
                        data:paras,
                        dataType:'json',
                        contentType: 'application/json;charset=utf-8',
                        success: onDataReceived
                    });

    情况有点儿特殊,在paras里传入一个是数组的对象rows, 使用这样的方法在后台打印不出结果。也就是paras['rows']根本不响应。直接打印request.GET,发现结果很诡异:

    <QueryDict: {u'project': [u'pirates'], u'rows[0][filter]': [u''], u'chart_keys[]': [u'Add Friend Request'], u'rows[0][property]': [u''], u'rows[0][casted_type]': [u''], u'bool_op': [u'or'], u'from_date': [u'2012-09-10'], u'limit': [u'40'], u'chart_type': [u'line'], u'action': [u'by'], u'type': [u'general'], u'arb_event': [u'Add Friend Receive'], u'unit': [u'day'], u'to_date': [u'2012-10-10']}>
    

    网上搜到在ajax的传参使用json格式的方法,唔愛吃蘋果 在http://www.cnblogs.com/jhxk/articles/1914026.html中提到使用jQuery的JSON插件:http://code.google.com/p/jquery-json/, 我也下载来试一试,引入js文件:

    <script type="text/javascript" src="/static/js/jquery.json-2.3.min.js"></script>
    

      然后在ajax的代码改写成:

    $.ajax({
                        type:'get',
                        url:'/testchart',
                        data:$.toJSON(paras),
                        dataType:'json',
                        contentType: 'application/json;charset=utf-8',
                        success: onDataReceived
                    });
    

      然后打印出来的结果为:

    <QueryDict: {u'{"rows":[{"property":null,"filter":null,"casted_type":null}],"bool_op":"or","arb_event":"Add Friend Receive","action":"by","unit":"day","type":"general","limit":40,"chart_type":"line","chart_keys":["Add Friend Request"],"from_date":"2012-09-10","to_date":"2012-10-10","project":"pirates"}': [u'']}>
    

      更更诡异的,我的所有参数变成了paras的一个key,其value为‘’.  看来这个不是问题的关键,于是改回到老路子上,但是对于数组rows出现了被拆分的情况,这个包装过程似乎有效。于是用

    paras.rows.push($.toJSON(rowstr));
    

      替换原来的paras.rows.push(rowstr);打印request.GET. 结果如下:

    <QueryDict: {u'chart_keys[]': [u'Add Friend Request'], u'bool_op': [u'or'], u'project': [u'pirates'], u'rows[]': [u'{"property":null,"filter":null,"casted_type":null}'], u'from_date': [u'2012-09-10'], u'limit': [u'40'], u'chart_type': [u'line'], u'action': [u'by'], u'type': [u'general'], u'arb_event': [u'Add Friend Receive'], u'unit': [u'day'], u'to_date': [u'2012-10-10']}>
    

      ok,是要的结果了,可以通过paras['rows[]']来获取rows整个传来的数组了。只是这个[]在这挺讨厌的。

  • 相关阅读:
    win7用VMware安装CentOs7搭建Linux环境
    安装Vmware并破解
    Webpack打包
    jquery获取动态table列表的值并组装成数组返回
    微信、钉钉、浏览器上H5页面头部标题(title)的修改,不刷新问题
    帮你彻底搞懂JS中的prototype、__proto__与constructor(图解)
    mysql常用语句
    JQuery日期插件
    系统激活教程及文件
    git教程
  • 原文地址:https://www.cnblogs.com/xiami303/p/2720007.html
Copyright © 2011-2022 走看看