我有一个按钮,点击我需要的按钮:
代码是:
$('.dwnSingleImageLink').live('click', function(event){
$('html, body').animate({scrollTop : 0}, 'slow');
singleFileDownload = true;
var renditions = getRenditionResultset($(this).attr('data-id'), $(this).attr('data-docname'));
for(var i = 0; i < renditions.length; i++){
var name = renditions[i].name;
if(name == 'Web' || name == 'Thumbnail' || name == 'Preview' || name == 'Native File'){
var info = {
name: renditions[i].name,
fileSize: renditions[i].fileSize,
width: renditions[i].width,
height: renditions[i].height,
label: ''
};
renditionInfos.push(info);
}
}
$('#downloadModal').find('input:hidden').attr({
'data-id': $(this).attr('data-id'),
'data-docname': $(this).attr('data-docname'),
'data-title': $(this).attr('data-title')
}).after(function(){
$('#downloadModal').modal('show').css({
width: '380px',
'margin-left': function () {
return - ($(this).width() / 2);
}
});
});
});
var getRenditionResultset = function(dID, dDocName){
var submitData = {
IdcService: 'RENDITION_INFO',
dID: dID,
dDocName: dDocName
};
var renditions = new Array();
var fields = new Array();
$.ucm.executeServiceIsJson(submitData, function(ucmResponse) {
var resultSet = ucmResponse.ResultSets['manifest'];
alert('jym');
for (var fieldIndex = 0; fieldIndex < resultSet.fields.length; fieldIndex++) {
var field = new RenditionField();
field.name = resultSet.fields[fieldIndex].name;
field.index = fieldIndex;
fields.push(field);
}
for(var rowIndex = 0; rowIndex < resultSet.rows.length; rowIndex++) {
var rendition = new Rendition();
for(var i = 0; i < fields.length; i++){
var value = resultSet.rows[rowIndex][fields[i].index];
switch(fields[i].name){
case 'extRenditionName' :
rendition.name = value;
break;
case 'extRenditionDescription' :
rendition.description = value;
break;
case 'extRenditionPath' :
rendition.path = value;
break;
case 'extRenditionOriginalName' :
rendition.originalName = value;
break;
case 'extRenditionParams' :
rendition.params = value;
break;
case 'extRenditionType' :
rendition.type = value;
break;
case 'extRenditionFileSize' :
rendition.fileSize = value;
break;
case 'extRenditionWidth' :
rendition.width = value;
break;
case 'extRenditionHeight' :
rendition.height = value;
break;
case 'extRenditionFileType' :
rendition.fileType = value;
break;
case 'extRenditionPixelsPerInchVertical' :
rendition.pixelsPerInchVertical = value;
break;
case 'extRenditionPixelsPerInchHorizontal' :
rendition.pixelsPerInchHorizontal = value;
break;
case 'extRenditionColours' :
rendition.colours = value;
break;
}
}
renditions.push(rendition);
}
});
return renditions;
}
function RenditionField() {
this.name = '';
this.index = -1;
}
function Rendition() {
this.name = '';
this.description = '';
this.path = '';
this.originalName = '';
this.params = '';
this.type = '';
this.fileSize = '';
this.width = '';
this.height = '';
this.fileType = '';
this.pixelsPerInchVertical = '';
this.pixelsPerInchHorizontal = '';
this.colours = '';
}
Rendition.prototype.toString = function() {
return '[object Rendition: name=' + this.name + ';description=' + this.description + ';path=' + this.path + ';originalName=' + this.originalName +
';params=' + this.params + ';type=' + this.type + ';fileSize=' + this.fileSize + ';width=' + this.width + ';height=' + this.height + ';fileType=' +
this.fileType + ';pixelsPerInchVertical=' + this.pixelsPerInchVertical + ';pixelsPerInchHorizontal=' + this.pixelsPerInchHorizontal + ';colours=' +
this.colours + ']';
}
这是一个很大的代码。它的作用是,发送ajax请求并接收响应。然后它处理响应并创建一个数组。这些是方法getRenditionResultset()
的工作。但是在我的应用程序生成数组之前,在这个方法的调用之下的for循环也得到了show modal块。我如何等待getRenditionResultset()
方法的结束,然后执行for {和click
处理程序的其余代码?在这种情况下有没有办法使用$.when()
?
问候。
答案 0 :(得分:1)
再接受一个回调作为getRenditionResultset
方法的参数。
var getRenditionResultset = function(dID, dDocName, onComplete){
$.ucm.executeServiceIsJson(submitData, function(ucmResponse) {
//after creating the array with the reponse
if(typeof onComplete === function){
onComplete()
}
}
}
在调用时,请执行
$('.dwnSingleImageLink').on('click', function(event){
.
.
var renditions = getRenditionResultset(blah, blah, function(){
//code to execute after request has completed.
}
.
.
}
答案 1 :(得分:0)
AJAX调用往往是异步的。因此,必须等待完成才能执行更多代码。幸运的是,jQuery为这样的任务提供了一种工具:它的AJAX方法采用了一些可选的回调参数。例如,在等待请求完成后执行以下代码:
$.ajax({
"url": "http://example.com/ajax.php",
"type": "post",
"dataType": "json",
"success": function(data) {
// data is a json-decoded object.
}
});
答案 2 :(得分:0)
您应该使用getRenditionResultSet
中的AJAX成功回调来执行显示模态的调用后代码。