0

我有一个名为 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();

只有当它产生结果时。

任何帮助???

4

3 回答 3

2

您可以使用 jQuery Deferreds。$.ajax() 实际上返回一个承诺。因此,您可以执行以下操作:

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
});
于 2012-12-11T07:54:28.890 回答
0

嗨,只需async:false在您的 AJAX 调用中使用。它会阻止控件,直到响应到达客户端...

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;
                }
            });
        },.....
于 2012-12-11T07:56:58.637 回答
0

我为此做了一个简单的解决方案。我只是在我的控件的 GetErrors() 的 onSuccess 事件中调用了我的填充函数,并且一切正常。

于 2013-01-14T07:56:06.170 回答