zoukankan      html  css  js  c++  java
  • js不加alert后面的代码不工作

    问题:用Ajax从后台拿到了json,append到select的option里面,然后想用for循环来设置某个作为默认值,发现在for循环外面加了个alert()的话,就能实现成功,没有加这个alert(),for循环里面的代码感觉是没工作:

    源代码如下:

        function getShotName() {
            $.getJSON("getshotname", function(result) {
                $.each(result, function(k, v) {
                    $("#shotName").append(
                            "<option value='"+k+"'>" + v + "</option>");
                });
            });
        }
        function setDefaultShotName() {
            var select = document.getElementById("shotName");
            var checkValue = 23;

       alert("Coming");
            for (var i = 0; i < select.options.length; i++) {
                if (select.options[i].value == checkValue) {
                    select.options[i].selected = true;
                    break;
                }
            }
        }

    测试的时候发现,没有这个alert("Coming"),下面for里面的就执行不成功,里面加alert也不会弹出

    原因:js执行的时候,获取json过程中,没有等待,一直往下走,走到for这里,没有拿到返回的json,所以这个option还没有被append,就是空,所以里面就不会执行,加了alert的话,强制等待,这时候json已经有数据了,所以会执行到for里面的代码

    解决:实际使用中,不能一直用alert来代替,网上找了一下原因,是AJAX的异步请求原理,默认是异步的,就是执行提交的时候继续往下走,所以要把这个默认的设置更改一下:

        function getShotName() {
            $.ajaxSettings.async = false;
            $.getJSON("getshotname", function(result) {
                $.each(result, function(k, v) {
                    $("#shotName").append(
                            "<option value='"+k+"'>" + v + "</option>");
                });
            });
        }

    加了这句话之后,获取json过程中会等待再执行,就能正确执行了!

  • 相关阅读:
    ELM学习
    《进化》从孤胆极客到高效团队
    《人件》《PeopleWare》 【美】Tom DeMarco TimothyLister 著 肖然 张逸 滕云 译
    《进化》从孤胆极客到高效团队---Notes1
    大数据第一部分LInux学习Note1
    C#Windows窗体初学
    C#初学笔记(Windows编程的基本概念)
    C#学习2017-9-26(读取文本文件和读取二进制文件)Notes9
    C#学习2017-9-26Notes8(文件和流,FileStream类)
    C#学习笔记Notes8(接口,接口实现,程序集,命名空间,using)
  • 原文地址:https://www.cnblogs.com/ichemmwangd/p/4777665.html
Copyright © 2011-2022 走看看