【发布时间】:2015-04-20 11:13:16
【问题描述】:
if (DataService.Validation(file)) {
//angularjs call to api controller
};
//DataService
Validation: function (file) {
var Url = URL.createObjectURL(file);
var img = new Image();
$(img).load(function () {
var imgwidth = this.width;
var imgheight = this.height;
if (imgheight > 400) {
viewModel.ErrorMessage = 'The Image height cannot be more then 400 px.';
return false;
}
});
img.src = Url;
if (file == null) {
viewModel.ErrorMessage = 'Please select a file to upload.';
return false;
}
if (viewModel.Name == null) {
viewModel.ErrorMessage = 'Name is a required field.';
return false;
}
return true;
}
上述验证函数正在完成执行并返回true,没有检查img加载函数中的代码。这意味着即使图像大于400px,验证也会返回true,因为加载中的代码在很长一段时间后运行一旦整个 Jquery ajax 调用被发送到 api 控制器.. 我想要实现的是,在执行图像加载中的代码之前,验证不应该返回值。
【问题讨论】:
-
图片加载是异步的。所以,你看到的是对的。
-
您需要将所有代码放在
.load之后 - 调用到您传递给此调用的回调函数中。 -
我尝试在加载后删除所有代码并将其添加为函数,并从加载事件内部调用。但结果仍然相同它不等待加载执行它只是返回未定义..我们可以像在某些 ajax 调用中那样强制加载调用是同步的吗?
标签: javascript jquery angularjs jquery-ui jquery-file-upload