我有一个名为 Widget 的.js类.js在小部件中.js类我正在启动一个 errors.ascx 控件类,该类在其中定义了 JS 脚本函数"GetErrors()"。现在,当我从我的小部件.js类调用 GetErrors 时,它工作得很好。我必须使用 GetErrors() 函数的输出在小部件中填充一些控件.js。但问题是,有时 GetErrors() 需要花费大量时间来执行,并且控件会运行到我的小部件类中。 并且填充控件时没有任何数据。
所以底线是我需要知道Jquery的OnSuccess函数的确切用法。
这是我的错误.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;
}
});
},.....
小部件.js文件的代码是
function CreateWidgetInstance() {
widgetInstance = new WidgetInstance();
widgetInstance.GetErrors();
}
现在我希望控件应该从
widgetInstance.GetErrors();
只有当它产生了结果时。
任何帮助???
你可以使用 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
});
嗨,只需在 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;
}
});
},.....
我为此做了一个简单的解决方案。我刚刚在我的控件的 GetErrors() 的 onSuccess 事件中调用了我的填充函数,一切都运行良好。