为什么我的Ajax将“未定义”数据传递给我的SQL服务器

时间:2016-07-05 19:24:21

标签: javascript c# jquery mvvm asp.net-core

我正在努力将数据从项目的前端传递到后端。我在这里想要实现的是简单地传递月份数和年份,以便我的后端方法可以从正确的月份和年份检索数据。月份编号和年份编号由单独的查询和下拉按钮提供。

我有2个方法,一个是初始加载,另一个是在用户更改其中一个下拉值后触发的。

以下是各种代码段。第一个是设置图表的初始加载。代码片段按此顺序排列(我将放置标签): [AJAX,setDATA,带变量的SQL方法]

这是初始加载数据: 第一个AJAX

                $.ajax({
                xhrFields: { withCredentials: true },
                url: areaUrl + "api/Change/IndividualMonthChange",
                success: data => {
                    self.isLoading(false);
                    self.data(data);
                    self.setPlotData(data);
                    self.isLoaded(true);
                },
                error: data => {
                    self.loadingError(true);
                }
            });

这是setData部分。

            self.setPlotData = (data: any) => {
            self.plotDataLabels.push('Significant', 'Normal', 'Minor', 'Standard', 'Urgent', 'Implementer');

            var dataItems = [];
            dataItems.push(
                { y: data.List[0].Significant, color: '#fea156' },
                { y: data.List[0].Normal, color: '#b191c3' },
                { y: data.List[0].Minor, color: '#83bfd1' },
                { y: data.List[0].Standard, color: '#72e76d' },
                { y: data.List[0].Urgent, color: '#fa5a5a' },
                { y: data.List[0].Implementer, color: '#f9da5b' }
            );
            self.plotData.push({ data: dataItems });
        }

这是SQL Server / C#查询

        public ListResult IndividualMonthChange(int month = 7, int year = 2016)
    {
        var sql = "Select Count(Case When RQ.Req_Type_Composite_Ref = '5' Then 1 Else Null End) As[Significant], Count(Case When RQ.Req_Type_Composite_Ref = '124' Then 1 Else Null End) AS [Normal], Count(Case When RQ.Req_Type_Composite_Ref = '4' Then 1 Else Null End) AS [Minor], Count(Case When RQ.Req_Type_Composite_Ref = '6' Then 1 Else Null End) AS [Standard], Count(Case When RQ.Req_Type_Composite_Ref = '100' Then 1 Else Null End) AS [Urgent], Count(Case When RQ.Req_Type_Composite_Ref IN('5', '124', '4', '6', '100') Then 1 Else Null End) AS [TotalChanges],Count(Case When RQ.Req_Type_Composite_Ref NOT In(4, 5, 6, 100, 124) Then 1 Else Null End) AS [Implementer] " +
            "From VMWareSM_Test.dbo.RV_REQUEST As RQ " +
            "Where Req_Status_Ref Not In(3, 5, 6, 16, 21, 38, 43) ";

        var d = new DateTime();

        if (year >= 2000 && year <= d.Year)
        {
            sql += " And DATEPART(yyyy, RQ.Req_Impl_Start_Date) = @year AND DATEPART(MM, RQ.Req_Impl_Start_Date) = @month ";
        }

        SqlParameter[] sqlParams =
        {
            new SqlParameter
            {
                ParameterName = "@month",
                Value = month,
                DbType = DbType.Int32,
                Direction = ParameterDirection.Input
            },
            new SqlParameter
            {
                ParameterName = "@year",
                Value = year,
                DbType = DbType.Int32,
                Direction = ParameterDirection.Input
            }
        };

        var result = SqlHelper.ExecuteReadOnlyQuery(
            context: Db,
            sql: sql
            );

        return new ListResult(result, 1, result.Count, result.Count);
    }

这是ajax,setData和SQL方法,当其中一个下拉按钮被激活时,它会更改数据。此部分还包括按钮触发时的索引数据(一旦更改了其中一个值)。数据是从上面的SQLServer / C#查询中提取的。

注意:查询方法中的月份和年份数字仅设置为默认值。它只是用于调试。但是,Bonus有一种方法可以将它设置为当前月份和当前年份。到目前为止,我的尝试一直告诉我变量必须在运行时是静态的或者那种性质的东西所以我不能使用引用。

            self.loadChangesData = (month: number, year: number) => {
            self.isChangesLoading(true);
            self.isChangesLoaded(false);

            $.ajax({
                xhrFields: { withCredentials: true },
                url: areaUrl + "api/Changes/IndividualMonthChange?year=" + year + "&month" + month,
                success: data => {
                    self.isChangesLoading(false);
                    self.data(data);
                    self.setChangesData(data);
                    self.isChangesLoaded(true);
                },
                error: data => {
                    self.loadingError(true);
                }
            });
        }

这最终设置了第二个图表的数据。我不确定它是否是plotdata变量,但是

        self.setChangesData = (data: any) => {
            while (self.plotData().length) {
                self.plotData().pop();
            }

            while (self.plotDataLabels().length) {
                self.plotDataLabels().pop();
            }

            self.plotDataLabels.push('Significant', 'Normal', 'Minor', 'Standard', 'Urgent', 'Implementer');

            var dataItems = [];
            dataItems.push(
                { y: data.List[0].Significant, color: '#fea156' },
                { y: data.List[0].Normal, color: '#b191c3' },
                { y: data.List[0].Minor, color: '#83bfd1' },
                { y: data.List[0].Standard, color: '#72e76d' },
                { y: data.List[0].Urgent, color: '#fa5a5a' },
                { y: data.List[0].Implementer, color: '#f9da5b' }
            );
            self.plotData.push({ data: dataItems });
        }

以下两种方法要求在更改任一下拉按钮时更改图表。这些可能是罪魁祸首,因为这些似乎一无所获。检查控制台时,出现的错误表明这两个变量都是“未定义”。

实施例: GET http://transistordev/VFire/api/Changes/IndividualMonthChange?year=function%20valueOf()%20 {%20 [native%20code]%20}?monthfunction%20valueOf()%20 {%20 [native%20code]%20}&amp; _ = 1467746558438 404(Not Found)

XHR http://transistordev/VFire/api/Changes/IndividualMonthChange?year=function%20valueOf()%20 {%20 [native%20code]%20}?monthfunction%20valueOf()%20 {%20 [native%20code]%20}&amp; _ = 1467746558438

1 个答案:

答案 0 :(得分:0)

因此仔细观察后,我意识到我忘了在下面添加一行代码。我没有添加SQLparams代码,因此可以发送参数,我也忘记了AJAX调用中的'='。

谢谢!