• jquery ajax的async属性的理解


     1 $(function(){
     2     queryTemplateSort();
     3     //
     4     fillAddTemplatePage();
     5     function queryTemplateSort() {
     6         $.ajax({
     7             type: "post",
     8             url: "http://localhost:8080/...",
     9             data: {"pageNo": 1, "pageSize": 20},
    10             dataType: "json",
    11             success:function(data){
    12                 var sortArray = data.dataList;
    13                 for(var i = 0; i < sortArray.length; i++) {
    14                     var option = "<option value='"+ sortArray[i].id +"'>"+ sortArray[i].name +"</option>";
    15                     var $selectElement = $(".templateSelectDiv select");
    16                     $selectElement.append(option);
    17                 }
    18             }
    19         }); 
    20     }
    21     fillAddTemplatePage();
    22     function fillAddTemplatePage() {
    23     var varUrl = window.location.search;
    24     if(varUrl === "") {
    25         return;
    26     }
    27     var topicid = "" + parseToNum(varUrl);
    28     var jsonObject = {"topicid": topicid};
    29     var jsonStr = JSON.stringify(jsonObject);
    30     $.ajax({
    31         type: "post",
    32         url: "http://localhost:8080/....",
    33         data: {'params':jsonStr},
    34         dataType: "json",
    35         success: function(data){
    36             fillData(data.obj);
    37         }    
    38     });
    39}
    40        /**填充页面数据*/
    41 function fillData(data) {
    42     document.getElementById("magazineTopicId").value = data.id;
    43     $(".templateSelectDiv select option[value='" + data.categoryId + "']")[0].selected = true;    //erro undefined
    44     document.getElementById("title").value = data.varName;
    45     document.getElementById("chooseMusic").value = data.music.name;
    46     document.getElementById("musicLink").value = data.music.link;
    47     fillPage(data);
    48}
    49      .....
    50}
    1 //jsp
    2 <div class="templateSelectDiv">
    3     <select >
    4         <option value="0">全部</option>
    5     </select>
    6 </div>

    加载这个jsp的时候调用queryTemplateSort方法,其中用ajax请求到数据后把选项拼接到这个select框中,第24行如果请求的url没有带参数则不填充页面数据,如果带了参数就根据一个id去查询这个页面的数据,然后回写到页面,但是因为在调用queryTemplateSort方法,ajax请求没有设置async属性,默认为true,支持异步,就是执行queryTemplateSort方法的同时分出一个线程继续向下执行fillAddTemplatePage方法,而这个方法的选择器选中的元素是queryTemplateSort执行完毕后才添加上去的,所以当如果queryTemplateSort没执行完就执行fillAddTemplatePage,下面这个语句就会报undefined的错误。当设置async: false时(意思是不分出另外的线程,执行完该方法后才会继续执行其他代码),这个时候当再执行到fillAddTemplatePage时,queryTemplateSort已经执行成功,这时就不会报错。

    $(".templateSelectDiv select option[value='" + data.categoryId + "']")[0].selected = true;
    后来发现就算取消了异步请求这样选中下拉框的选项还是会出现undefined的错误,而下拉框已经加载完成,不得要领,后来无赖改成
    $(".templateSelectDiv select").val(data.categoryId)来选中下拉框。
  • 相关阅读:
    jdb应用 远程调试
    maven POM总结
    jvm
    jdbc取出表名 名称
    nginx配置openssl证书
    DNS A记录 CNAME NS记录等的区别
    linux文件目录类命令|--cd指令
    linux文件目录类命令--ls命令
    linux文件目录类命令--pwd命令
    linux 帮助指令
  • 原文地址:https://www.cnblogs.com/dengmj/p/4913951.html
Copyright © 2020-2023  润新知