js 加上alert就成功执行,不加就不对??

问题描述

js 加上alert就成功执行,不加就不对??
 @{
    Layout = null;
}

<!DOCTYPE html>

<html>
<head>
    <meta name="viewport" content="width=device-width" />
    <script src="~/echarts/build/source/echarts.js"></script>
    <script src="~/echarts/build/dist/echarts.js"></script>
    <script src="~/Scripts/jquery-1.7.1.js"></script>
    <script src="~/Scripts/jquery-1.7.1.min.js"></script>
    <title>echartLineJson</title>
    <script type="text/javascript">
        //ajax获取后台数据,x轴的name从数据库中读取
        function fetchXname() {
            var arr = new Array();
            $.ajax(
            {
                url: "/DropDownTree/echartLineJsonTest",
                dataType: "text",
                success: function (data) {
                    //调用函数获取值,转换成数组模式
                    var ss = eval(data);
                    for (var i = 0; i < ss.length; i++) {
                        //alert(ss[i].name);
                        arr.push(ss[i].name);
                    }
                }
            });
            return arr;

        }
        //最高气温
        function dataXRand() {
            var dataarr = new Array();
            $.ajax({
                url: "/DropDownTree/echartLineJsonTest",
                dataType: "text",
                success: function (data) {
                    var ss = eval(data);
                    for (var i = 0; i < ss.length; i++) {
                        dataarr.push(ss[i].data2);
                    }
                }
            });
          alert(dataarr);       //在此处加上alert()就成功,取消显示结果就不正确??
           // window.setTimeout(function () {  return dataarr; },1000);
            return dataarr;
        }

        //option配置
        var option = {
            title: {
                text: '未来一周气温变化',
                subtext: '纯属虚构'
            },
            tooltip: {
                trigger: 'axis'
            },
            legend: {
                data: ['最高气温', '最低气温']
            },
            toolbox: {
                show: true,
                feature: {
                    mark: { show: true },
                    dataView: { show: true, readOnly: false },
                    magicType: { show: true, type: ['line', 'bar'] },
                    restore: { show: true },
                    saveAsImage: { show: true }
                }
            },
            calculable: true,
            xAxis: [
                {
                    type: 'category',
                    boundaryGap: false,
                    data: fetchXname()
                }
            ],
            yAxis: [
                {
                    type: 'value',
                    axisLabel: {
                        formatter: '{value} °C'
                    }
                }
            ],
            series: function () {

            },
            series: [
                {
                    name: "最高气温",
                    type: 'line',
                    data: dataXRand(),
                    markPoint: {
                        data: [
                            { type: 'max', name: '最大值' },
                            { type: 'min', name: '最小值' }
                        ]
                    },
                    markLine: {
                        data: [
                            { type: 'average', name: '平均值' }
                        ]
                    }
                },
                      {
                          name: '最低气温',
                          type: 'line',
                          data: [1, -2, 2, 5, 2, 3, -1.5],
                          markPoint: {
                              data: [
                                  { name: '周最低', value: -2, xAxis: 1, yAxis: -1.5 }
                              ]
                          },
                          markLine: {
                              data: [
                                  { type: 'average', name: '平均值' }
                              ]
                          }
                      }
            ]
        };
        // 路径配置
        require.config({
            paths: {
                echarts: '/echarts/build/dist'
            }
        });
        //使用
        require(
            [
                'echarts',
                'echarts/chart/line'  //line为折线图, 使用柱状图就加载bar模块,按需加
            ],

             function (ec) {
                 // 基于准备好的dom,初始化echarts图表
                 var myChart = ec.init(document.getElementById('main'));
                 // 为echarts对象加载数据 

                 myChart.setOption(option);
                 myChart.hideLoading();
             }

             );
    </script>

</head>
<body>
    <div>
    <!-- 为ECharts准备一个具备大小(宽高)的Dom -->
    <div id="main" style="height:400px"></div>

    <input id="jsontest" />
    </div>
</body>
</html>

具体代码如上所示,在最高气温dataXRand函数内的alert()加上就成功执行,不加就不对。前台接收的是后台传过来的json字符串
正确执行的结果如下图所示

请问这种情况应该如何解决?

解决方案

 $.ajax({
                url: "/DropDownTree/echartLineJsonTest",
                dataType: "text",
                                async:false,//加上这个,要不是异步执行。
                success: function (data) {
                    var ss = eval(data);
                    for (var i = 0; i < ss.length; i++) {
                        dataarr.push(ss[i].data2);
                    }
                }
            });

解决方案二:

async为false后ajax同步请求,回挂起其后面的js代码执行指导ajax返回结果后继续执行

不配置默认为true为异步,异步不会挂起ajax的执行,会继续执行后续的代码,js代码的执行速度比你ajax返回返回数据快多了,所以ajax没返回就已经执行return dataarr;这句导致success回调没执行填充dataarr数组。

你增加alert会挂起return dataarr;的执行,但是不会阻止ajax的返回和success的执行,此时ajax相当于是另外的一个线程填充了dataarr,点你点击alert的弹框确定时间间隔足够ajax返回返回数据填充dataarr了,所以确定后执行return dataarr;时已经有数据了,除非网络很繁忙ajax未返回

解决方案三:

eval('('+data+')')

解决方案四:

虽然ajax不熟,但是原理上应该是这样的:ajax请求需要时间的啊,加了alert()可以有足够的时间取到数据并填充dataarr;否则dataarr还是空的你就返回了。

解决方案五:

$.ajax({
url : 's.php',
timeout : 3000,
error : function(xhr,textStatus){
console.log('error:'+textStatus);
},
});

你在你的循环上面价格timout,稍微大大一点就可以了!你后台的逻辑估计是个长时任务,ajax请求不到数据,就直接return了,你加上alert相当于一个请求延时!

解决方案六:

你关闭异步那就不如不用ajax了!如果你后台需要一天才能计算完,不知道的还以为你前台宕机了呢!

时间: 2024-10-01 23:54:16

js 加上alert就成功执行,不加就不对??的相关文章

js算法-求一个JS算法,30s没执行成功,则1分钟后继续执行,。。。直到执行成功

问题描述 求一个JS算法,30s没执行成功,则1分钟后继续执行,...直到执行成功 执行一件事,如果没成功,则每过一段时间后自动执行,直到成功 解决方案 <script language=javascript> var int=self.setInterval("dothings()",1000)//1秒1次 function dothings() { if(true){//如果执行成功 clearInterval(int);//关闭定时执行 } } </script

js中回调函数的执行顺序

问题描述 js中回调函数的执行顺序 代码是调用了地图api函数,里面有个回调函数,想在回调函数里把值赋给全局变量,但是回调函数之后的代码里全局变量的值没变,具体见代码: <script type="text/javascript"> //基本地图加载 var map = new AMap.Map("container", { resizeEnable: true, //地图中心点 zoom: 13 //地图显示的缩放级别 }); var g=18; AM

js定时调用方法成功后并停止调用的实现

 这篇文章主要介绍了js定时调用方法成功后并停止调用的实现,需要的朋友可以参考下  代码如下: <pre name="code" class="javascript"><pre name="code" class="javascript"> <span style="color: rgb(58, 62, 67); font-family: 'Segoe UI Semibold', 'Se

在html中调用js文件(无路径错误和书写错误),但js中的函数无法执行

问题描述 在html中调用js文件(无路径错误和书写错误),但js中的函数无法执行 我在html中调用js文件 这个文件中有5个函数,其中有一个函数已经可以用了,但是这个文件中的另外两个函数在调用的时候却没有反映,具体代码如下html代码 <form name=""form_dx"" action=""#"" method=""post"" onSubmit=""

JS的预编译和执行顺序 详析

原文:JS的预编译和执行顺序 详析 最近在复习javascript的事件处理时发现了一个问题,然后也是我来写javascript的预编译和执行顺序的问题   代码:   复制代码 代码一 <html>   <head>     <title>事件处理</title>     <meta http-equiv="content-type" content="text/html;charset=utf-8"/>

j ery-ajax中返回成功执行jquery代码的时候,没有效果?

问题描述 ajax中返回成功执行jquery代码的时候,没有效果? 当我在jqery后面追加alert的时候效果会出现 但是当我把alert去掉,或者,不写,juery效果就没有效果 解决方案 你要把ajax调用后面的代码全部写在回调函数中才能保证先执行ajax,返回以后再执行这些代码. 解决方案二: 这是显然的,ajax的是异步执行,所以可能先执行了alert,才执行回调中的代码 解决方案三: data.code=="F"这个分支无效? 你的alert在回调中,和你jquery有无效

JS动态插入并立即执行回调函数的方法_javascript技巧

本文实例讲述了JS动态插入并立即执行回调函数的方法.分享给大家供大家参考,具体如下: <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"> <html xmlns="http://www.w3.org/1999/xhtml"> <

关于js中alert弹出窗口文本换行问题简单详细说明_基础知识

1. 在js文件里面的弹出窗口: 复制代码 代码如下: <script type="text/javascript"> $(document).ready(function () { alert("Hello \r\n Javascript!"); alert("Hello \n Javascript!"); }); </script> 2.在.cs页面后台拼接的js弹出窗口 LiteralResult.Text = st

【hibernate 执行方法未插入数据库】hibernate的save方法成功执行,但是未插入到数据库

  今天做项目,碰上这个问题: hibernate的save方法成功执行,但是未插入到数据库. Dao层代码: 1 @Override 2 public void save(T t) { 3 this.getSession().save(t); 4 } View Code Service层的代码: 1 @Override 2 public void save(T t) { 3 // TODO Auto-generated method stub 4 dao.save(t); 5 } View C