使用Ajax Jquery获取数据并将参数发送到Controller

时间:2016-02-10 00:28:12

标签: javascript jquery ajax asp.net-mvc

我有一个从数据库中获取数据并在图表上显示的方法。它的工作正常。现在,我需要在其上放置一些过滤器,并且我面临着将我的参数传递给控制器​​的困难。

$("#quadro").click(function () {

    Highcharts.setOptions({
        lang: {
            decimalPoint: ',',
            thousandsSep: '.'
        }
    });

    var data1 = $('#data1').val();
    var data2 = $('#data2').val();
    var empresa = $('#empresa option:selected').text();   

    $.ajax({
        url: 'Painel/QuadroReceitas',
        dataType: "json",
        type: "GET",
        contentType: 'application/json; charset=utf-8',
        data: { 'data1': data1, 'data2': data2, 'empresa': empresa },
        async: false,
        processData: false,
        cache: false,
        delay: 15,
        success: function (data) {

            var Categories = new Array();
            var FaturadoArray = new Array();
            var RecebidoArray = new Array();
            var AtrasadoArray = new Array();

            for (var i in data) {
                Categories.push(data[i].Mes);
                FaturadoArray.push(data[i].Receitas);
                RecebidoArray.push(data[i].Recebido);
                AtrasadoArray.push(data[i].Inad_Atual);
            }

            var MesArray = JSON.parse(JSON.stringify(Categories));
            quadroReceitas(MesArray, FaturadoArray, RecebidoArray, AtrasadoArray);
        },

        error: function (xhr) {
            alert('error');
        }
    });
});


function quadroReceitas(MesArray, FaturadoArray, RecebidoArray, AtrasadoArray) {

    var GlobalRotation = -90;
    var GlobalAlign = 'right';
    var X;
    var Y;

    var chart = new Highcharts.Chart({
        chart: {
            renderTo: 'container',
            type: 'column',
            realignLabels: true,
            animation: false
        },

        title: {
            text: 'Quadro de Receitas'
        },

        legend: {
            align: 'left',
            verticalAlign: 'top',
            floating: true,
            x: 0,
            y: 0
        },

        xAxis: {
            categories: MesArray,
            crosshair: true,
        },

        yAxis: {
            labels: { enabled: false },
            title: { enabled: false },
        },

        credits: {
            enabled: false
        },

        tooltip: {
            headerFormat: '<span style="font-size:10px">{point.key}</span><table>',

            pointFormat: '<tr><td style="color:{series.color};padding:0">{series.name}: </td>' +
                '<td style="padding:0"><b>{point.y:,.1f}</b></td></tr>',
            footerFormat: '</table>',
            shared: true,
            useHTML: true
        },

        plotOptions: {
            column: {
                animation: true,
                pointPadding: 0.05, // Defaults to 0.1
                groupPadding: 0.05, // Defaults to 0.2

                dataLabels: {
                    enabled: true,
                    rotation: GlobalRotation,
                    color: '#FFFFFF',
                    align: GlobalAlign,
                    verticalAlign: "top",
                    y: 10,
                    inside: false,
                    crop: false,

                    style: {
                        fontSize: '12px',
                        fontFamily: 'Verdana, sans-serif'
                    },

                    formatter: function () {
                        return Highcharts.numberFormat(this.y, 2);
                    }
                }
            },
        },

        series: [
            { name: 'Faturado', color: '#004a91', data: FaturadoArray },
            { name: 'Recebido', color: '#009147', data: RecebidoArray },
            { name: 'Atrasado', color: '#FF0000', data: AtrasadoArray }
        ]
    });
}

在控制器上,我的代码如下:

  [HttpGet]
        public JsonResult QuadroReceitas(string data1, string data2, string empresa)
        {
            if(empresa == "empresa" || empresa == null)
            {
                empresa = "%";
            }            

            //Chave oChave = new Chave();
            DateTime agora = DateTime.Now;
            var start = new DateTime(agora.Year, agora.Month, 1).AddMonths(-11);
            var end = new DateTime(agora.Year, agora.Month, 1).AddMonths(1).AddDays(-1);

            if (data1 == null)
                data1 = start.ToShortDateString();

            if (data2 == null)
                data2 = end.ToShortDateString();

            ContasReceberData recData = new ContasReceberData();
            List<ContasReceber> receitas = new List<ContasReceber>();

            receitas = recData.GetQuadroReceitas(data1, data2, empresa)
                .Select(o => new ContasReceber
                {
                    Mes = o.Mes,
                    Receitas = Math.Round(o.Receitas,2),
                    Recebido = Math.Round(o.Recebido, 2),
                    Inad_Atual = Math.Round(o.Inad_Atual, 2)
                }).ToList();

            return Json(receitas, JsonRequestBehavior.AllowGet);
        }  

正如我所说,它工作正常,但没有参数:

data1,data2,empresa

我尝试将AJAX更改为POST,将Controller更改为HttpPost,因为我在另一个主题中读到但是没有用。

1 个答案:

答案 0 :(得分:2)

因为在你的ajax方法中你设置了processData = false。将它设置为true或删除processData行,它就可以了!

var empresa = $('#empresa option:selected').text();   

$.ajax({
    url: 'Painel/QuadroReceitas',
    dataType: "json",
    type: "GET",
    contentType: 'application/json; charset=utf-8',
    data: { 'data1': data1, 'data2': data2, 'empresa': empresa },
    async: false,
    // processData: false,
    cache: false,
    delay: 15,
    success: function (data) {

        var Categories = new Array();
        var FaturadoArray = new Array();
        var RecebidoArray = new Array();
        var AtrasadoArray = new Array();

        for (var i in data) {
            Categories.push(data[i].Mes);
            FaturadoArray.push(data[i].Receitas);
            RecebidoArray.push(data[i].Recebido);
            AtrasadoArray.push(data[i].Inad_Atual);
        }

        var MesArray = JSON.parse(JSON.stringify(Categories));
        quadroReceitas(MesArray, FaturadoArray, RecebidoArray, AtrasadoArray);
    },

    error: function (xhr) {
        alert('error');
    }
});

});