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;
时间: 2024-10-09 05:38:41