场景描述

如下,打开页面时,获取默认选中的项目,同时也会初始化Combobox下拉框下拉列表数据

问题描述

获取默认选中项目及下拉列表的js函数位于common.js文件,类似如下:

// 根据项目类型,获取对应的项目

function getProjects(projectType) {

// 请求已有已启用项目

$.get('/action/getProjects?projectType=' + projectType, function(data,status) {

var jsonData = JSON.parse(data);

return jsonData;

});

}

js函数调用代码位于另一个html文件--testTaskManager.html,<script></script>元素标签内。

如下

// 初始化项目combobox下拉列表

var jsonData = getProjects('TestProject');

console.log(jsonData);

if (jsonData['result'] == 'success') {

$('#projects').combobox('loadData', jsonData['data']);

} else {

$.messager.alert('错误信息', '获取项目失败:' + jsonData['data'], 'error');

}

结果打开页面时,控制台提示如下:

原因很简单,

var jsonData = getProjects('TestProject');

以上代码getProjects函数调用,会引发get请求。

紧接着,开始执行后续的代码,涉及到jsonData的引用,但是此时,请求可能还没返回结果,也就是说getProjects 还没返回数据给jsonData,jsonData未定义。

解决方案

让这两个文件中的代码“同步”运行。

function getProjects(projectType) {

var defer = $.Deferred(); //返回Deferred对象;

// 请求已有已启用项目

$.get('/action/getProjects?projectType=' + projectType, function(data,status) {

var jsonData = JSON.parse(data);

defer.resolve(jsonData);

});

return defer;

}

// 初始化项目combobox下拉列表

getProjects('TestProject').then(function(jsonData) {

if (jsonData['result'] == 'success') {

$('#projects').combobox('loadData', jsonData['data']);

} else {

$.messager.alert('错误信息', '获取项目失败:' + jsonData['data'], 'error');

}

});

说明

以上代码,大致意思就是先指定getProjects函数的的异步操作,执行完成后才执行then函数中指定的回调函数。

done(fn)

fail(fn)

then(done, fail)

done, fail这两个方法都用来绑定回调函数fn,fn可能是一个function,也有可能是多个以逗号分隔的function函数。

resolve(arg)

这个方法用来改变deferred对象的状态为resolved, 并告诉deferred对象执行done回调,arg是传递给回调函数的参数。

reject(arg)

这个方法用来改变deferred对象的状态为rejected,并告诉deferred对象执行done回调,arg是传递给回调函数的参数。

最新文章

  1. python(一)
  2. Swift 2.x -&gt; Swift 3.0
  3. 带给你灵感:30个超棒的 SVG 动画展示【下篇】
  4. HDU 4770 Lights Against DudelyLights
  5. hiho一下121周 后缀数组二&#183;重复旋律2
  6. ConcurrentDictionary 对决 Dictionary+Locking
  7. ios 实现推送消息
  8. 【学习笔记】【C语言】赋值运算
  9. ios - 再细读KVO
  10. (转载)四种常见的 POST 提交数据方式
  11. ubuntu 下安装Angular2-cli脚手架
  12. 【技术解密】SequoiaDB分布式存储原理
  13. Swift tableview自带的刷新控件
  14. MapReduce的架构及原理
  15. File文件的读写操作RandomAccessFile类
  16. python3 练手实例5 做一个简单电子时钟
  17. 适用于nodercms的打包构建脚本
  18. 正确的学python方式
  19. setuid setgid
  20. POJ 3190 Stall Reservations【贪心】

热门文章

  1. Asp.Net MVC Web API 中Swagger教程,使用Swagger创建Web API帮助文件
  2. C# dictionary to bytes and bytes convert to dictionary
  3. Android 数据库 SQLiteOpenHelper
  4. java 获取当前年份 月份,当月第一天和最后一天
  5. C#的语法----程序结构(3)
  6. Python类中的self的作用
  7. Azure 上通过Automation 实现定时开关虚拟机
  8. [debug] 解决pycharm中无法import自己建立的模块问题
  9. 《Vue笔记01: 我与唐金州二三事》
  10. centos安装Redis和设置远程访问