我有一个名为Widget.js的.js类 在widget.js类中,我启动了一个errors.ascx控件类,其中定义了JS脚本函数“GetErrors()”。 现在,当我从我的widgets.js类调用GetErrors时,它工作得非常好。 我必须使用GetErrors()函数的输出在widgets.js中填充一些控件。 但问题是,有时GetErrors()需要花费大量时间来执行,并且控件会运行到我的小部件类。并填充控件,其中没有任何数据。
所以底线是我需要知道Jquery的OnSuccess函数的确切用法。
这是我的errors.ascx代码
var WidgetInstance = function () {
this.GetErrors = function () {
$.ajax({
url: '/Management/GetLoggedOnUsersByMinutes/',
type: 'GET',
cache: false,
success: function (result) {
result = (typeof (result) == "object") ? result : $.parseJSON(result);
loggedOnUsers = result;
}
});
},.....
Widgets.js文件的代码是
function CreateWidgetInstance() {
widgetInstance = new WidgetInstance();
widgetInstance.GetErrors();
}
现在我想要控件应该从
移动widgetInstance.GetErrors();
只有在产生结果时才会生效。
任何帮助???
答案 0 :(得分:2)
您可以使用jQuery Deferreds。 $ .ajax()实际上返回一个promise。所以你可以做到以下几点:
var WidgetInstance = function () {
this.GetErrors = function () {
return $.ajax({
url: '/Management/GetLoggedOnUsersByMinutes/',
type: 'GET',
cache: false
});
},.....
然后你可以像这样处理结果......
widgetInstance.GetErrors().done(function(result){
//process the resulting data from the request here
});
答案 1 :(得分:0)
您好,只需在您的AJAX通话中使用async:false
..它将阻止控制,直到响应到达客户端...
var WidgetInstance = function () {
this.GetErrors = function () {
$.ajax({
url: '/Management/GetLoggedOnUsersByMinutes/',
type: 'GET',
cache: false,
async: false,
success: function (result) {
result = (typeof (result) == "object") ? result : $.parseJSON(result);
loggedOnUsers = result;
}
});
},.....
答案 2 :(得分:0)
我为此做了一个简单的解决方案.. 我刚刚在我的控件的GetErrors()的onSuccess事件中调用了我的填充函数,一切都运行得很好..