我有三个嵌套的ajax异步请求,用于将数据提取到javascript dataTable。这是它的伪代码,前两个调用是对web-API的调用,第三个调用是对我的MVC项目中从localDB获取数据的控制器的调用。
获取数据大约需要1分钟,进度条会正确更新,但当所有数据都完成时,所有行都会添加到我的dataTable中。我对控制器的第三个请求一定是出了问题。
$.ajax({
type: 'GET',
url: 'ListDevices'
dataType: 'json',
async: true,
success: function () {
$.ajax({
type: 'GET',
url: 'GetLocationsForDevice'
dataType: 'json',
async: true,
success: function () {
$.ajax({
type: 'GET',
url: 'GetDetailsForLocationFromDB'
dataType: 'json',
async: true,
success: function () {
//Add a new row to dataTable
}
//Update progressbar
}
}
第三个请求中的所有内容似乎都会在最后完成并执行。你知道为什么吗?
发布于 2014-08-26 08:17:11
当然,你的第三个代码是在“成功”中执行的。
这仅在"GetDetailsForLocationFromDB“的XMLHttpRequest.readyState =4和XMLHttpRequest.status =200时执行。
因此,只有当所有数据都被获取时,它才会一次提供所有数据并添加所有行。
因此,如果您这样做,问题中的“当所有数据完成时,所有行都被添加到我的dataTable中”是不可避免的。这不是一个错误,它按照设计工作。
如果您想要“逐行”更新,则需要对每一行进行单独调用(在“GetLocationsForDevice”中使用$.each )。
不过,要注意的是,使用这种方法会减慢速度。
https://stackoverflow.com/questions/25499416
复制