简体   繁体   English

JavaScript function 从外部呼叫时响应。 但不是从 ajax 的成功部分内部。 如何解决这个问题?

[英]JavaScript function respond when it's call from the outside. But not from the inside of success part of ajax. How to fix this?

I retrieved data using an AJAX call and data was received successfully as an array.我使用 AJAX 调用检索了数据,并且数据作为数组成功接收。 But couldn't use them to draw a chart.但不能用它们来绘制图表。 When I tried to find the problem, I saw that when I call to the javascript function from the outside, it will respond and draw the chart but when I call it from the inside of the success part of AJAX, it will call to function but the chart will not draw. When I tried to find the problem, I saw that when I call to the javascript function from the outside, it will respond and draw the chart but when I call it from the inside of the success part of AJAX, it will call to function but图表不会绘制。 Not even through an error.甚至没有通过错误。 (I used temporary data to check this trouble instead of retrieving data from the AJAX call [Var xData, Var yData]. (我使用临时数据来检查这个问题,而不是从 AJAX 调用 [Var xData, Var yData] 中检索数据。

Here is the sample data.这是样本数据。

            var xData = [
            { x: new Date(2020,11,11), y: 35.939 },
            { x: new Date(2020,11,12), y: 40.896 },
            { x: new Date(2020,11,15), y: null }
            ];

            var yData = [
            { x: new Date(2020,11,11), y: 10 },
            { x: new Date(2020,11,12), y: 45.896 },
            { x: new Date(2020,11,13), y: null }
            ];

When I call like this, It will not respond.当我这样打电话时,它不会响应。

function showDailySales() 
            {
                var From = document.getElementById("dailySalesFrom").value;
                var To = document.getElementById("dailySaleTo").value;
                var select = document.getElementById('slctAllNamesForDaily');
                var selectedItemID = select.options[select.selectedIndex].value;

                $.ajax({
                    type: 'post',
                    url: 'controll/ReportController.php', 
                    data: {
                        showDailySales : 1,
                        From : From,
                        To : To,
                        selectedItemID : selectedItemID,
                    },
                    success: function (response) 
                    {
                        if (response) {
                            viewPoint();  // <- This call to function, but not draw the chart
                        }
                    }
                });
            }

When I call like this with above mentioned data, it will draw the chart.当我用上述数据这样调用时,它会绘制图表。

                function drawChart(){                
                var arr = new Array;
                var chartLocationID = "chartContainerSales";
                var chartTopic = "Chart Topic";
                var xAxisTitle = "Date";
                var yAxixTitle = "Qty";

                arr.push(createData(xData, 'Apple'));
                arr.push(createData(yData, 'Orange'));
                
                chartShow(chartTopic, xAxisTitle, yAxixTitle, chartLocationID, arr);
            }

            function createData(getData, Name){
                var j = {
                    type:"line",
                    axisYType: "primary",
                    name: Name,
                    showInLegend: true,
                    markerSize: 0,
                    connectNullData: true,
                    xValueType: "number",
                    lineThickness: 3,
                    dataPoints: getData,                
                };
                return j;
            }

            function chartShow(chartTopic, xAxisTitle, yAxixTitle, chartLocationID, arr){

                var chartLocationID = chartLocationID;    
      
                // alert("Function called");

                window.onload = function() {
                    var chart = new CanvasJS.Chart(chartLocationID, {
                        animationEnabled: true,
                        title: {
                            text: chartTopic
                        },
                        axisX: {
                            title: xAxisTitle,                      
                            valueFormatString: "YYYY-MMM-D",
                            interval:1,
                            intervalType: "day"
                        },
                        axisY: {
                            title: yAxixTitle,
                            // minimum: 0,
                            suffix: "",
                            includeZero: true
                        },
                        legend: {
                            cursor: "pointer",
                            verticalAlign: "bottom",
                            horizontalAlign: "center",
                            dockInsidePlotArea: true,
                        },
                        data:arr 
                    });
                    chart.render();
                }
            }

            drawChart(); // <- This way call to function, and draw the chart

I tried so many ways, but it's not working.我尝试了很多方法,但它不起作用。 How do I fix this?我该如何解决?

. .

Changed the following code..更改了以下代码..

      function chartShow(chartTopic, xAxisTitle, yAxixTitle, chartLocationID, arr){
            var chartLocationID = chartLocationID;    
            // alert("Function called");
            window.onload = function() { //something }
      }

To:至:

      function chartShow(chartTopic, xAxisTitle, yAxixTitle, chartLocationID, arr){
            var chartLocationID = chartLocationID;    
            // alert("Function called");
            show();
            function show() { //something }
      }

According to the first comment.根据第一条评论。 That's worked.那行得通。

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM