等待AJAX请求响应
Waiting for AJAX request response
我有以下函数,在ABC.PrintReport.reportData
中存储一些数据。我使用AJAX请求获取数据。然后,我想在getKeyData
函数结束时打开的新窗口中打印数据。
但是,当窗口打开时,AJAX请求还没有返回数据,所以我得到了关于未定义属性的错误。这个的解是什么?
getKeyData: function () {
for (var key in ABC.PrintReport.keyList) {
k = ABC.PrintReport.keyList[key].Report_Key;
ABC.PrintReport.reportData[k] = null;
(function(index) {
Ext.Ajax.request({
url: ABC.Core.servicePath + '/task/' + ABC.PrintReport.processInstanceID + '/report/' + ABC.PrintReport.keyList[key].Report_Key + '?portalID=' + ABC.Core.portalID,
success: function (response) {
ABC.PrintReport.reportData[index] = Ext.JSON.decode(response.responseText)[0];
}
});
})(k);
}
window.open(location.pathname + 'resources/printreport.html');
},
如何使用不同的对象和承诺?虽然我没有看到一个方法all()
,应该帮助你解决你的问题,如下所示。
我建议使用Q库,参见组合部分。
all函数返回一个值数组的promise。当这个promise被实现时,数组将包含原始promise的兑现值,按照与这些promise相同的顺序。
那么你做:
Q.allSettled(promises)
.then(function (results) {
window.open(location.pathName + 'recources/printreport.html');
});
这比使用已成功请求的计数器更干净。
尽管正在进行的请求数量是可变的,但您可以跟踪它们,并在最后一个请求完成时在success方法中打开窗口。
getKeyData: function () {
var total = ABC.PrintReport.keyList.length;
var loaded = 0;
for (var key in ABC.PrintReport.keyList) {
k = ABC.PrintReport.keyList[key].Report_Key;
ABC.PrintReport.reportData[k] = null;
(function(index) {
Ext.Ajax.request({
url: ABC.Core.servicePath + '/task/' + ABC.PrintReport.processInstanceID + '/report/' + ABC.PrintReport.keyList[key].Report_Key + '?portalID=' + ABC.Core.portalID,
success: function (response) {
ABC.PrintReport.reportData[index] = Ext.JSON.decode(response.responseText)[0];
loaded++;
if (loaded == total) {
window.open(location.pathname + 'resources/printreport.html');
}
}
});
})(k);
}
},
或者您可以使用async lib,创建一个并行ajax调用,然后在所有ajax请求完成时使用window.open
调用您的回调。
相关文章:
- MockJax没有在JavaScript应用程序中发送对我AJAX请求的响应
- 由于响应中不存在“Access Control Allow Origin”标头,跨域请求停止工作
- 显示IIS上javascript文件(SOAP请求)的XML响应
- http请求使用html而不是json进行响应
- 飞行前响应中的访问控制允许标头不允许Angularjs请求标头字段访问控制允许标题
- Angular,对飞行前请求的响应
- 如何发送作为节点请求响应函数中的代码块的响应
- "所请求的名称已经作为不同类型的“”存在;HTTP 409响应错误
- 如何解压缩NodeJS请求's模块gzip响应体
- 在ajax请求中使用jquery获取javascript响应UJS
- HTTP请求使用cURL,但在浏览器中使用javascript时会得到CORS响应
- IE 10 挂起 XMLHttpRequest 6 分钟,然后响应请求(使用 AngularJS 实现 CRSF)
- backbone.js中.save()的响应/请求对象
- Django - 响应请求 AJAX
- 在响应请求之前,web服务器可以通过何种方式检查是否重定向现有页面上的GET请求
- 如何在完成SpookyJS脚本时响应请求
- Q延迟的Express未响应请求
- 节点.js:如何在检索数据时关闭响应/请求(chucks)
- Javascript/Java Servlet之间的响应/请求
- Ajax.更新程序和python响应请求